Recursos do WDDM 2.1
Este artigo fornece detalhes sobre os recursos e aprimoramentos do Windows Display Driver Model (WDDM) versão 2.1, disponível a partir da edição de aniversário do Windows 10 (Windows 10, versão 1607).
O WDDM 2.1 é opcional. Se implementado, é uma coleção de recursos de driver obrigatórios e opcionais. Um driver que dá suporte a uma dessas capacidades WDDM 2.1 deve dá suporte a todas as que são obrigatórias. Testes no Windows Hardware Lab Kit (HLK) podem validar o suporte,mas o Dxgkrnl verifica a consistência nas capacidades e DDIs.
Tabela de requisitos WDDM 2.1
Recurso | Aplicabilidade |
---|---|
Oferecer e reivindicar melhorias | Obrigatório |
Gerenciamento de memória de vídeo | Opcional |
Melhorias na confiabilidade do conteúdo protegido por HW | Selecionar hardware |
Suporte de aplicativos com o Windows GameDVR | Obrigatório |
Exibição indireta | Selecionar hardware |
Loja de drivers e instalação lado a lado | Obrigatório |
Compartilhamento de superfície de memória DirectX para cenários de câmera/captura | Obrigatório |
O WDDM 2.1 é compatível com as seguintes versões D3D: D3D9, D3D10, D3D10.1, D3D11, D3D11.x, D3D12
Oferecer e reivindicar melhorias
A função de retorno PFND3DDDI_RECLAIMALLOCATIONS3CB foi adicionada para reduzir o espaço na memória dos aplicativos executados em plano de fundo. Esta interface permite que aplicativos ofereçam recursos aceitáveis para completa anulação quando estiverem ao fundo. Como resultado, o Process Lifetime Manager é capaz de recuperar mais memória dos aplicativos em plano de fundo que usam DirectX, o que leva a menos encerramentos de aplicativos em plano de fundo quando sob pressão de memória.
Outras alterações DDI:
- retorno PFND3DDDI_UPDATEALLOCATIONPROPERTYCB
- retorno PFND3DDDI_OFFERALLOCATIONS2CB
- Estrutura D3DDDICB_OFFERALLOCATIONS2
- Estrutura D3DDDICB_RECLAIMALLOCATIONS3
Para mais informações sobre recursos de oferta e reivindicação, veja Oferecer e reivindicar alterações.
Suporte de aplicativos com o Windows GameDVR
A edição de aniversário do Windows 10 inclui a capacidade aprimorada de usar a barra de jogos do Windows e GameDVR com jogos em tela inteira.
Os drivers WDDM 2.1 são necessários para suportar um recurso de desempenho chamado preparação do lote atual, que adiciona suporte multi-tarefa para cadeia de troca com modelo flip. Esta funcionalidade essencial garante que os jogos em tela cheia com barra de jogo funcionam no mesmo nível de desempenho das versões anteriores do Windows.
Os seguintes DDIs foram adicionados para habilitar este recurso:
Exibição Indireta
No WDDM 2.1, a exibição indireta permite que os monitores conectados por USB participem das mesmas experiências do usuário que qualquer outro monitor. Além disso, um driver de exibição indireta (IDD) é um driver de modo de usuário, que é mais simples de desenvolver do que um driver de modo kernel e, como resultado, contribui para o aumento da confiabilidade geral do sistema.
No WDDM 2.1, os seguintes recursos/experiências de exibição USB estão ativados:
Quando um monitor USB está conectado a uma plataforma do Windows ou sistemas operacionais de atualização, os drivers adequados são baixados e instalados a partir da atualização do Windows.
Conectar monitores ao hardware de exibição USB detectará e definirá a topologia, resolução e DPI corretas do monitor.
Os usuários podem alterar a resolução e o dimensionamento do monitor.
Os usuários podem desconectar telas USB e reconectar telas sem efeitos secundários inesperados.
A topologia do monitor é mantida através da desconexão e reconexão ao mesmo monitor.
O USB exibe funções corretamente em vários estados de energia, incluindo repouso e hibernação.
Para mais informações sobre exibição indireta, veja Visão geral do modelo de driver de exibição indireta
Loja de drivers e instalação lado a lado
O WDDM 2.1 introduz a instalação de drivers gráficos através da loja de driver. Este mecanismo de instalação de drivers de gráficos melhora a resiliência das atualizações de driver do Windows Update. Elimina as disparidades de versões dos arquivos de driver que resultam em instabilidades do sistema e reinicializações iniciadas pelo usuário. Cada atualização de driver subsequente será executada diretamente a partir da sua localização única no armazenamento do driver (isto é, System32\DriverStore\FileRepository\[…]
), evitando assim novas gravações e incompatibilidades de arquivos do driver.
A implementação de recursos do armazenamento de drivers requer alterações no arquivo INF do driver gráfico para garantir que os arquivos do driver sejam copiados para o repositório exclusivo do driver. As mudanças INF são explicadas em mais detalhes em Requisitos INF.
DXIL
O WDDM 2.1 apresenta a transição da pilha do compilador de sombreador de GPU do DXBC (Código de Byte do DirectX) para o DXIL (DirectX Intermediate Language), um formato mais recente para transmitir instruções de sombreador para a GPU. A transição para o DXIL oferece os seguintes benefícios aos desenvolvedores:
Programação. A facilidade de desenvolvimento é aprimorada e a complexidade do processo de criação do sombreador é reduzida para os desenvolvedores, minimizando as diferenças entre a sintaxe de programação de GPU e as linguagens de CPU com as quais os desenvolvedores estão familiarizados.
Compilador de alto desempenho:
- O desempenho do sombreador de tempo de execução está habilitado para entregar desempenho aprimorado.
- O DXIL fornece um conjunto de elementos intrínsecos que permite o compartilhamento de dados entre as pistas dos processadores SIMD em GPUs.
Flexibilidade de fluxo de trabalho - O DXIL permite que os desenvolvedores controlem suas próprias ferramentas personalizadas e passagens de otimização e escolham quais etapas de compilação são aplicadas no tempo de compilação versus no tempo de execução.
Recursos avançados de linguagem - Uma linguagem desenvolvida fornece recursos importantes que eliminam as diferenças entre o código da GPU e o código da CPU e achatam a curva de aprendizado para programadores de GPU.
Com esses recursos focados em fornecer benefícios para os desenvolvedores, os usuários finais veem os benefícios no desempenho aprimorado de jogos novos ou atualizados, mesmo quando executados em hardware existente.
Compartilhamento de superfície de memória DirectX para cenários de câmera/captura
No WDDM 2.1, um componente de servidor de quadros foi introduzido para compartilhar uma câmera ou dispositivo de captura em vários processos simultaneamente. Os quadros capturados podem ser salvos em um local de memória do qual vários aplicativos podem ler, em vez de copiar os dados da imagem entre processos e coprocessos várias vezes. Esse recurso fornece gerenciamento mais eficiente de imagens capturadas em vários processos, economia de energia, redução de largura de banda e redução de latência para hardware e drivers compatíveis com WDDM 2.1. O resultado final são ganhos de desempenho para aplicativos e usuários.
O servidor de quadros aloca uma imagem capturada como memória compartilhável entre processos e compartilha essa memória com processos que solicitam acesso. Como o servidor de quadros transmite a textura para vários processos do cliente, a textura deve dar suporte à leitura simultânea. Atualmente, as texturas NV12 são suportadas para essa finalidade.
Cache e biblioteca do Pipeline State Object (PSO)
O PSO (Objeto de Estado do Pipeline) é uma interface que representa as instruções e os recursos do pipeline gráfico (também conhecido como estado) como um objeto unificado para reduzir a incompatibilidade entre D3D e decomposições de driver do estado. A execução de aplicativos e jogos graficamente exigentes requer a criação de um grande número de PSOs. O PSO foi introduzido no D3D12.
A biblioteca e o cache PSO do WDDM 2.1 permitem que aplicativos de jogos armazenem um PSO no armazenamento físico após serem criados durante a execução inicial. Esse recurso permite que o runtime do D3D recupere os PSOs pré-criados da biblioteca em instâncias futuras, reduzindo assim o tempo de extração do PSO. Por exemplo, ao executar um jogo após a primeira vez ou após a reinicialização do PC, o conteúdo será carregado da biblioteca física como PSOs salvos.
Carimbos de data/hora de início da GPU do pipeline
No WDDM 2.1, foi introduzida a capacidade de recuperar os carimbos de data/hora do início de eventos gráficos no pipeline da GPU. Esse recurso, usado com o fim dos carimbos de data/hora do pipeline, fornece aos desenvolvedores uma visualização clara e refinada da paralelização, do pipelining e do tempo das atividades do aplicativo que ocorrem na GPU. Os desenvolvedores podem otimizar ainda mais seu código e investigar ineficiências e outros problemas de desempenho quando recebem o tempo de execução de cada evento.
Esse recurso contribui para permitir a coleta de dados de desempenho de GPU “em tempo real e baixa sobrecarga” e, ao mesmo tempo, fornece informações suficientes para visualizar e medir cargas de trabalho em GPUs. O objetivo do recurso é fornecer informações suficientes para reconstruir a ordem exata e a duração das operações executadas pela GPU. Com essas informações, as ferramentas podem visualizar o paralelismo e o pipeline com um mecanismo, medir cargas de trabalho de GPU e identificar possíveis problemas de sincronização.
Exibição do microcódigo da GPU
O WDDM 2.1 permite que os desenvolvedores otimizem ainda mais seus sombreadores apresentando a exibição de microcódigo de GPU. Os desenvolvedores programam o pipeline gráfico criando sombreadores em HLSL (linguagem de sombreador de alto nível), que são compilados para uma linguagem intermediária para o driver de GPU. O driver executa compilações e otimizações adicionais para converter esse código em instruções específicas da GPU que permaneceram indefinidas para os desenvolvedores. Com esse recurso, os desenvolvedores recebem código legível específico da GPU para avaliar a extensão da otimização e velocidade do sombreador.
Esse recurso permite que o driver de modo de usuário (UMD) comente em cada estágio programável do pipeline de gráficos (sombreadores) e retorne informações acionáveis sobre o uso ou uso indevido desses sombreadores pelo programador. O microcódigo específico da GPU é desmontado e apresentado em formato de cadeia de caracteres legível junto dos comentários UMD. Os desenvolvedores podem exibir seu mapeamento de código HLSL para código de GPU legível lado a lado, o que permite que eles modifiquem dinamicamente seu código e vejam os resultados de otimização do compilador no lado do código da GPU.
Como determinar a versão do WDDM
WDDM 2.1 Limites máximos
Os drivers relatam o suporte ao WDDM 2.1 por meio de DXGK_DRIVERCAPS::WDDMVersion com a constante de versão:
DXGK_WDDMVERSION::DXGKDDI_WDDMv2_1 = 0x2100
O Dxgkrnl não usa o limite WDDMVersion como uma maneira de determinar quais recursos têm suporte; essa tarefa é deixada para outros limites ou presença de DDI. No entanto, se o driver relatar o suporte ao WDDM 2.1 por meio do limite WDDMVersion, o Dxgkrnl validará se os limites ou DDIs exigidos pelo WDDM 2.1 estiverem presentes e não criará o adaptador se não estiverem. Limites inconsistentes resultam em falha na criação do adaptador ou segmento.
Observação
Os aplicativos, existentes ou mais recentes, não devem precisar consultar o modelo de driver para aproveitar os recursos da edição de aniversário do Windows 10 habilitados por meio de melhorias de plataforma, como as descritas aqui. Quaisquer alterações de funcionalidade devem ser exibidas por meio do respectivo tempo de execução.
A seguinte constante foi adicionada para corresponder ao KMT_DRIVERVERSION_WDDM_2_1:
typedef enum _DXGIDRIVERMODELVERSION
{
DXGIDMVERSION_1_0 = 1000,
DXGIDMVERSION_1_1_PRERELEASE = 1102,
DXGIDMVERSION_1_1 = 1105,
DXGIDMVERSION_1_2 = 1200,
DXGIDMVERSION_1_3 = 1300,
DXGIDMVERSION_2_0 = 2000,
DXGIDMVERSION_2_1 = 2100,
} DXGIDRIVERMODELVERSION;
As versões da interface DDI no KMD (driver do modo kernel) são as seguintes:
#define DXGKDDI_INTERFACE_VERSION_VISTA 0x1052
#define DXGKDDI_INTERFACE_VERSION_VISTA_SP1 0x1053
#define DXGKDDI_INTERFACE_VERSION_WIN7 0x2005
#define DXGKDDI_INTERFACE_VERSION_WIN8 0x300E
#define DXGKDDI_INTERFACE_VERSION_WDDM1_3 0x4002
#define DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION 0x4003
#define DXGKDDI_INTERFACE_VERSION_WDDM2_0 0x5023
#define DXGKDDI_INTERFACE_VERSION_WDDM2_1 0x6002
Requisitos de INF de gráficos
Os drivers gráficos WDDM 2.1 têm requisitos INF diferentes em comparação com o WDDM 2.0 ou drivers anteriores:
O WDDM 2.1 deve ter uma Pontuação de Recursos idêntica à do driver gráfico WDDM 2.0 (D1).
Os drivers gráficos WDDM 2.1 devem usar uma seção de instalação INF do sistema operacional diferente.
Alterações de INF do driver gráfico WDDM 2.1 para a instalação do “Repositório de Driver”.
Para obter mais informações, veja Seções e diretivas de arquivo INF.
Os arquivos de driver de 32 bits e 64 bits permanecerão e serão carregados do repositório de driver. O redirecionamento do sistema de arquivos WoW64 não se aplica ao repositório de driver. Os IHVs podem especificar subpastas usando a sintaxe INF padrão para criar, por exemplo, uma pasta WoW64 na pasta de repositório de driver exclusiva, se desejado.
O exemplo a seguir mostra como um INF que dá suporte à execução do repositório de driver se difere do comportamento anterior.
WINDOWS 10 ANNIVERSARY EDITION APPROACH: RUNNING DRIVERS FROM THE DRIVER STORE
[DestinationDirs]
KMDCopyFiles = 13
UMDCopyFiles = 13
UMDWoW64CopyFiles = 13
[DDInstall]
CopyFiles=KMDCopyFiles
CopyFiles=UMDCopyFiles
CopyFiles=UMDWoW64CopyFile
[KMDCopyFiles]
myKMD.sys
[UMDCopyFiles]
myUMD64.dll
myOpenCL64.dll
myOpenGL64.dll
[UMDWow64CopyFiles]
myUMD32.dll
myOpenCL32.dll
myOpenGL32.dll
[DDInstall.Services]
AddService = serviceName, 0x00000002, serviceName_Service_Inst
[serviceName_Service_Inst]
ServiceBinary = %13%\serviceName.sys
[regAdd]
HKR,,UserModeDriverName,%REG_MULTI_SZ%,%13%\myUMD64.dll, %13%\myUMD64.dll, %13%\myUMD64.dll, %13%\myUMD64.dll
HKR,,UserModeDriverNameWoW,%REG_MULTI_SZ%, %13%\myUMD32.dll, %13%\myUMD32.dll, %13%\myUMD32.dll, %13%\myUMD32.dll
HKLM,"Software\Khronos\OpenCL\Vendors",%13%\myOpenCL64.dll,%REG_DWORD%,0x00000000
HKLM,"Software\Wow6432Node\Khronos\OpenCL\Vendors",%13%\ myOpenCL32.dll,%REG_DWORD%,0x00000000
HKR,,OpenGLDriverName,%REG_MULTI_SZ%,%13%\myOpenGL64.dll
HKR,,OpenGLDriverNameWoW,%REG_MULTI_SZ%,%13%\myOpenGL32.dll
Para especificar uma subpasta, os drivers podem usar a sintaxe, conforme mostrado no exemplo a seguir:
...
[DestinationDirs]
...
UMDWoW64CopyFiles = 13,WoW64
...
[regAdd]
...
HRK,, UserModeDriverNameWoW,%REG_MULTI_SZ%, %13%\WoW64\myUMD.dll, %13%\WoW64\myUMD.dll, %13%\
The manufacturer install section decoration for Windows 10 Anniversary edition WDDM 2.1 drivers is as follows:
...
[Manufacturer]
%Grfx_Manf% = IHVGfx, NTamd64.10.0…14310
...
[IHVGfx.NTamd64.10.0…14310]
; HW ID list
[list of HW IDs]
Controle de versão do driver
Os arquivos DLL e SYS do driver para um adaptador gráfico ou conjunto de chips devem ter uma versão de arquivo formatada corretamente.
As informações de versão do arquivo de arquivo de driver (.inf), driver de modo kernel (.sys) e driver de modo de usuário (.dll) devem ser correspondentes. Além disso, as informações de versão de todos os [SignatureAttributes]
arquivos identificados na seção do .inf como binários PETrust devem corresponder ao .inf. É recomendável que as informações de versão do arquivo para binários adicionais em um pacote de driver correspondam ao .inf.
Para ser consistente com os requisitos de controle de versão de arquivo predominantes para sistemas operacionais herdados, a formatação da versão do arquivo deve seguir um AA.BB.CCCCC.DDDDD
padrão em que:
AA indica a versão do modelo do driver do dispositivo mais apto listado no .inf
BB (para drivers WDDM 1.2 e superiores) indica o nível de recurso D3D mais alto disponível do dispositivo mais apto listado no .inf
BB (para drivers WDDM 1.1 e inferiores) indica a versão DDI mais alta disponível com suporte pelo dispositivo mais apto listado no .inf
CCCCC é um número de até cinco dígitos de 0 a 65535 escolhido pelo fornecedor
DDDDD é um número de até cinco dígitos de 0 a 65535 escolhido pelo fornecedor
Valores para o campo AA:
Modelo do driver | Valor AA |
---|---|
WDDM v2.1 | 21 |
WDDM v2.0 | 20 |
WDDM v1.3 | 10 |
WDDM v1.2 | 9 |
WDDM v1.1 | 8 |
WDDM v1.0 | 7 |
XDDM | 6 |
Valores para o campo BB (WDDM 1.2 e posterior):
Nível de recurso do DirectX | BB_value |
---|---|
12_x | 21 |
12_1 | 20 |
12_0 | 19 |
11_1 | 18 |
11_0 | 17 |
10_1 | 16 |
10_0 | 15 |
9_3 | 14 |
9_2 | 14 |
9_1 | 14 |
Valores para o campo BB (WDDM 1.1 e anterior):
Versão do DDI | BB_value |
---|---|
D3D11-DDI no nível de recurso 11_0 | 17 |
D3D11-DDI no nível de recurso 10 | 16 |
D3D10-DDI | 15 |
D3D9 DDI | 14 |
Exemplos
Observação
Não há necessidade de preencher números com zeros à esquerda, ou seja, 123 não precisa ser representado como 00123 para os campos CCCCC ou DDDDD. Nas versões anteriores do sistema operacional Windows, os dois últimos campos tinham 4 dígitos, ou seja, CCCC.DDDD. Portanto, os exemplos de versões de driver anteriores a Windows 10 e WDDM 2.0 têm apenas 4 dígitos.
WDDM 1.0, Windows Vista:
- Os drivers DDI D3D9 podem usar 7.14.0000.0000 a 7.14.9999.9999
- Os drivers DDI D3D10 podem usar 7.15.0000.0000 a 7.15.9999.9999
Windows 7, WDDM 1.1:
- Os drivers DDI D3D9 podem usar 8.14.0000.0000 a 8.14.9999.9999
- Os drivers DDI D3D10 podem usar 8.15.0000.0000 a 8.15.9999.9999
- DDI D3D11 com drivers FL_10_0 pode usar 8.16.0000.0000 a 8.16.9999.9999
- DDI D3D11 com drivers FL_11_0 pode usar 8.17.0000.0000 a 8.17.9999.9999
Windows 8, WDDM 1.2:
- FL_10_0 HW pode usar 9.15.0000.0000 a 9.15.9999.9999
- FL_10_1 HW pode usar 9.16.0000.0000 a 9.16.9999.9999
- FL_11_0 HW pode usar 9.17.0000.0000 a 9.17.9999.9999
- FL_11_1 HW pode usar 9.18.0000.0000 a 9.18.9999.9999
Windows 8.1, WDDM 1.3:
- FL_10_0 HW pode usar 10.15.0000.0000 a 10.15.9999.9999
- FL_10_1 HW pode usar 10.16.0000.0000 a 10.16.9999.9999
- FL_11_0 HW pode usar 10.17.0000.0000 a 10.17.9999.9999
- FL_11_1 HW pode usar 10.18.0000.0000 a 10.18.9999.9999
Windows 10, WDDM 2.0:
- FL_11_1 HW pode usar 20.18.0000.0000 a 20.18.65535.65535
- FL_12_0 HW pode usar 20.19.0000.0000 a 20.19.65535.65535
- FL_12_1 HW pode usar 20.20.0000.0000 a 20.20.65535.65535
Windows 10, WDDM 2.1:
- FL_11_1 HW pode usar 20.18.0000.0000 a 21.18.65535.65535
- FL_12_0 HW pode usar 20.19.0000.0000 a 21.19.65535.65535
- FL_12_1 HW pode usar 20.20.0000.0000 a 21.20.65535.65535
Aplicação
Um teste obrigatório na lista de reprodução de certificação HLK para Windows 10 builds superiores a 10586 impõe as regras especificadas neste artigo. O teste é opcional para versões mais antigas do sistema operacional. Para builds do Windows 10 após 10586, a versão do WDDM foi atualizada para 2.1. Outra maneira de exibir isso é que o requisito obrigatório só se aplica a drivers criados para WDDM 2.1 ou superior.