Condividi tramite


Funzionalità di WDDM 2.1

Questo articolo fornisce informazioni dettagliate sulle funzionalità e i miglioramenti in Windows Display Driver Model (WDDM) versione 2.1, disponibile a partire da Windows 10 Anniversary Edition (Windows 10, versione 1607).

WDDM 2.1 è facoltativo. Se implementato, è una raccolta di funzionalità di driver obbligatorie e facoltative. Un driver che supporta una di queste funzionalità WDDM 2.1 deve supportare tutte le funzionalità obbligatorie. I test di Windows Hardware Lab Kit (HLK) possono convalidare il supporto, ma Dxgkrnl verifica la coerenza nelle funzionalità e nelle DDI.

Tabella dei requisiti di WDDM 2.1

Funzionalità Applicabilità
Miglioramenti dell'offerta e del recupero Obbligatorio
Gestione della memoria video Facoltativo
Miglioramenti dell'affidabilità del contenuto protetto HW Seleziona hardware
Supporto delle applicazioni con Windows GameDVR Obbligatorio
Visualizzazione indiretta Seleziona hardware
Archivio driver e installazione side-by-side Obbligatorio
Condivisione della superficie di memoria DirectX per scenari di fotocamera/acquisizione Obbligatorio

WDDM 2.1 supporta le versioni D3D seguenti: D3D9, D3D10, D3D10.1, D3D11, D3D11.x, D3D12

Miglioramenti dell'offerta e del recupero

La funzione di callback PFND3DDDI_RECLAIMALLOCATIONS3CB è stata aggiunta per ridurre il footprint di memoria delle applicazioni in esecuzione in modalità in background. Questa interfaccia consente alle applicazioni di offrire risorse accettabili per il decommit quando si passa in background. Di conseguenza, Process Lifetime Manager è in grado di recuperare più memoria dalle app in background che usano DirectX, il che comporta un minor numero di terminazioni dell'applicazione in background quando è sotto pressione di memoria.

Altre modifiche DDI:

Per altre informazioni sull'offerta e il recupero delle risorse, vedere Offerta e recupero delle modifiche.

Supporto delle applicazioni con Windows GameDVR

L'edizione dell'anniversario di Windows 10 include la possibilità di usare la barra dei giochi di Windows e GameDVR con giochi a schermo intero.

I driver WDDM 2.1 sono necessari per supportare una funzionalità di prestazioni denominata invio in batch, che aggiunge il supporto multithreading per gli swapchain del modello flip. Questa funzionalità essenziale garantisce che i giochi a schermo intero con barra del gioco vengano eseguiti allo stesso livello di prestazioni delle versioni precedenti di Windows.

Per abilitare questa funzionalità sono state aggiunte le DDI seguenti:

Visualizzazione indiretta

In WDDM 2.1, Indirect Display consente agli schermi connessi tramite USB di partecipare a tutte le stesse esperienze utente di qualsiasi altro monitor. Inoltre, un driver di visualizzazione indiretto (IDD) è un driver in modalità utente, che è più semplice da sviluppare rispetto a un driver in modalità kernel e di conseguenza contribuisce a migliorare l'affidabilità complessiva del sistema.

In WDDM 2.1 sono abilitate le funzionalità/esperienze di visualizzazione USB seguenti:

  • Quando uno schermo USB è connesso a una piattaforma Windows o aggiorna i sistemi operativi, i driver appropriati vengono scaricati e installati da Windows Update.

  • La connessione dei monitoraggi all'hardware di visualizzazione USB rileverà e imposta la topologia di monitoraggio, la risoluzione e i valori DPI corretti.

  • Gli utenti possono modificare la risoluzione e il ridimensionamento del monitor.

  • Gli utenti possono disconnettere gli schermi USB e riconnettersi senza effetti collaterali imprevisti.

  • La topologia di monitoraggio viene mantenuta tramite disconnessione e riconnessione allo stesso monitoraggio.

  • USB visualizza correttamente in vari stati di alimentazione, tra cui sospensione e ibernazione.

Per altre informazioni sulla visualizzazione indiretta, vedere Panoramica del modello di driver di visualizzazione indiretta

Driver Store e installazione side-by-Side driver

WDDM 2.1 introduce l'installazione di driver grafici tramite l'archivio driver. Questo meccanismo di installazione dei driver grafici migliora la resilienza degli aggiornamenti dei driver da Windows Update. Elimina le mancate corrispondenze della versione del file del driver che comportano instabilità del sistema e riavvii avviati dall'utente. Ogni aggiornamento del driver successivo verrà eseguito direttamente dal relativo percorso univoco nell'archivio driver (ovvero System32\DriverStore\FileRepository\[…], ), evitando così la sovrascrittura e la mancata corrispondenza del file del driver.

L'implementazione delle funzionalità dell'archivio driver richiede modifiche al file INF del driver grafico per garantire che i file del driver vengano copiati nel repository univoco dei driver. Le modifiche inF sono illustrate in dettaglio in Requisiti INF.

DXIL

WDDM 2.1 introduce la transizione dello stack del compilatore dello shader GPU da DirectX Byte Code (DXBC) a DirectX Intermediate Language (DXIL), un formato più recente per trasmettere le istruzioni dello shader alla GPU. La transizione a DXIL offre i vantaggi seguenti agli sviluppatori:

  • Programmabilità. La facilità di sviluppo è migliorata e la complessità del processo di creazione dello shader viene ridotta per gli sviluppatori riducendo al minimo le differenze tra la sintassi di programmazione GPU e i linguaggi CPU con cui gli sviluppatori hanno familiarità.

  • Compilatore con prestazioni più elevate:

    • Le prestazioni dello shader di runtime sono abilitate per offrire prestazioni migliorate.
    • DXIL fornisce un set di oggetti intrinseci che consentono la condivisione dei dati tra le corsie dei processori SIMD nelle GPU.
  • Flessibilità del flusso di lavoro: DXIL consente agli sviluppatori di controllare i propri strumenti personalizzati e i passaggi di ottimizzazione e scegliere quali passaggi di compilazione vengono applicati in fase di compilazione rispetto al runtime.

  • Funzionalità avanzate del linguaggio: un linguaggio evoluto offre funzionalità chiave che eliminano le differenze tra codice GPU e codice CPU e appiattisce la curva di apprendimento per i programmatori GPU.

Con queste funzionalità incentrate sulla fornitura di vantaggi per gli sviluppatori, gli utenti finali vedono i vantaggi in termini di prestazioni migliorate dei giochi nuovi o aggiornati anche quando vengono eseguiti su hardware esistente.

Condivisione della superficie di memoria DirectX per scenari di fotocamera/acquisizione

In WDDM 2.1 è stato introdotto un componente server frame per condividere una fotocamera o un dispositivo di acquisizione tra più processi contemporaneamente. I fotogrammi acquisiti possono essere salvati in un percorso di memoria da cui più applicazioni possono leggere, invece di copiare i dati dell'immagine tra processi e co-processi più volte. Questa funzionalità offre una gestione più efficiente delle immagini acquisite in più processi, risparmio energetico, riduzione della larghezza di banda e riduzione della latenza per hardware e driver conformi a WDDM 2.1. I risultati finali sono miglioramenti delle prestazioni per le applicazioni e gli utenti.

Il server frame alloca un'immagine acquisita come memoria condivisibile tra processi e condivide questa memoria per i processi che richiedono l'accesso. Poiché il server frame trasmette la trama a più processi client, la trama deve supportare la lettura simultanea. Attualmente le trame NV12 sono supportate a questo scopo.

Memorizzazione nella cache e nella libreria dell'oggetto stato della pipeline (PSO)

L'oggetto stato della pipeline (PSO) è un'interfaccia che rappresenta le istruzioni e le risorse della pipeline grafica (note anche come stato) come oggetto unificato per ridurre la mancata corrispondenza tra D3D e scomposizione del driver dello stato. L'esecuzione grafica di applicazioni e giochi impegnativi richiede la creazione di un numero elevato di PSO. PSO è stato introdotto in D3D12.

La libreria PSO WDDM 2.1 e la memorizzazione nella cache consentono alle applicazioni di gioco di archiviare un pso nello spazio di archiviazione fisico dopo essere stato creato durante l'esecuzione iniziale. Questa funzionalità consente al runtime D3D di recuperare gli oggetti PSO precreati dalla libreria nelle istanze future, riducendo così il tempo di estrazione PSO. Ad esempio, quando si esegue un gioco dopo la prima volta o dopo il riavvio del PC, il contenuto verrà caricato dalla libreria fisica come pso salvati.

Inizio dei timestamp gpu della pipeline

In WDDM 2.1 è stata introdotta la funzionalità per recuperare i timestamp dell'inizio degli eventi grafici nella pipeline GPU. Questa funzionalità, usata con la fine dei timestamp della pipeline, offre agli sviluppatori una visualizzazione chiara e granulare della parallelizzazione, della pipelining e della tempistica delle attività dell'applicazione eseguite sulla GPU. Gli sviluppatori possono ottimizzare ulteriormente il codice e analizzare le inefficienze e altri problemi di prestazioni quando vengono forniti il tempo di esecuzione di ogni evento.

Questa funzionalità contribuisce ad abilitare la raccolta dei dati sulle prestazioni GPU in tempo reale e a basso sovraccarico e allo stesso tempo fornisce informazioni sufficienti per visualizzare e misurare i carichi di lavoro nelle GPU. L'obiettivo della funzionalità è fornire informazioni sufficienti per ricostruire l'ordine esatto e la durata delle operazioni eseguite dalla GPU. Con queste informazioni, gli strumenti possono visualizzare il parallelismo e la pipelining con un motore, misurare i carichi di lavoro GPU e identificare potenziali problemi di sincronizzazione.

Visualizzazione del microcodice GPU

WDDM 2.1 consente agli sviluppatori di ottimizzare ulteriormente gli shader presentando la visualizzazione di microcodice GPU. Gli sviluppatori programmano la pipeline grafica creando shader in un linguaggio di shader di alto livello (HLSL), che vengono quindi compilati in un linguaggio intermedio per il driver GPU. Il driver esegue compilazioni e ottimizzazioni aggiuntive per convertire questo codice in istruzioni specifiche della GPU che rimangono opache per gli sviluppatori. Con questa funzionalità, gli sviluppatori vengono presentati codice leggibile specifico della GPU per valutare la portata dell'ottimizzazione e della velocità dello shader.

Questa funzionalità consente al driver in modalità utente (UMD) di commentare ogni fase programmabile della pipeline grafica (shader) e restituire informazioni utilizzabili sull'uso o sull'uso improprio di tali shader da parte del programmatore. Il microcodice specifico della GPU viene disassemblato e presentato in formato stringa leggibile insieme ai commenti UMD. Gli sviluppatori possono visualizzare il mapping del codice HLSL al codice GPU leggibile affiancato, che consente loro di modificare dinamicamente il codice e visualizzare i risultati dell'ottimizzazione del compilatore sul lato codice GPU.

Determinazione della versione WDDM

Maiuscole WDDM 2.1

I driver segnalano il supporto di WDDM 2.1 tramite DXGK_DRIVERCAPS::WDDMVersion con la costante della versione:

DXGK_WDDMVERSION::DXGKDDI_WDDMv2_1 = 0x2100

Dxgkrnl non usa il limite WDDMVersion come modo per determinare quali funzionalità sono supportate. Tale attività viene lasciata ad altri limiti o presenza DDI. Tuttavia, se il driver segnala il supporto WDDM 2.1 tramite il limite WDDMVersion , Dxgkrnl verifica che i limiti o le DDI richieste da WDDM 2.1 siano presenti e non creino l'adattatore se non lo sono. I limiti incoerenti causano un errore di creazione dell'adattatore o del segmento.

Nota

Le applicazioni, esistenti o successive, non devono eseguire query sul modello di driver per sfruttare le funzionalità di Windows 10 Anniversary Edition abilitate tramite miglioramenti della piattaforma, come quelli descritti qui. Tutte le modifiche alle funzionalità devono essere rilevate tramite il rispettivo runtime.

La costante seguente è stata aggiunta per trovare la corrispondenza 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;

Le versioni dell'interfaccia DDI nel driver in modalità kernel (KMD) sono le seguenti:

#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

Requisiti INF per la grafica

I driver grafici WDDM 2.1 hanno requisiti INF diversi rispetto ai driver WDDM 2.0 o precedenti:

  1. WDDM 2.1 deve avere un punteggio di funzionalità identico a quello del driver grafico WDDM 2.0 (D1).

  2. I driver di grafica WDDM 2.1 devono usare un'altra sezione di installazione di OS INF.

  3. MODIFICHE INF del driver grafico WDDM 2.1 per l'installazione dell'archivio driver.

Per altre info, vedi Sezioni e direttive dei file INF.

I file driver a 32 bit e a 64 bit rimarranno in e verranno caricati dall'archivio driver. Il reindirizzamento del file system WoW64 non si applica all'archivio driver. IHV può specificare sottocartelle usando la sintassi INF standard per creare, ad esempio, una cartella WoW64 nella cartella univoca dell'archivio driver, se necessario.

L'esempio seguente mostra come un'esecuzione di supporto INF dall'archivio driver differisce dal comportamento precedente.

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

Per specificare una sottocartella, i driver possono usare la sintassi come illustrato nell'esempio seguente:

...
[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]

Controllo delle versioni dei driver

La DLL del driver e i file SYS per una scheda grafica o un set di chip devono avere una versione del file formattata correttamente.

Il file di informazioni sul driver (con estensione inf), il driver in modalità kernel (.sys) e le informazioni sulla versione del file in modalità utente (.dll) devono corrispondere. Inoltre, le informazioni sulla versione per tutti i file identificati nella [SignatureAttributes] sezione di .inf come file binari PETrust devono corrispondere a .inf. È consigliabile che le informazioni sulla versione del file per i file binari aggiuntivi in un pacchetto driver corrispondano a .inf.

Per essere coerenti con i requisiti di controllo delle versioni dei file prevalenti per i sistemi operativi legacy, la formattazione delle versioni dei file deve seguire un AA.BB.CCCCC.DDDDD modello in cui:

  • AA indica la versione del modello di driver del dispositivo più idoneo elencata in .inf

  • BB (per i driver WDDM 1.2 e versioni successive) indica il livello di funzionalità D3D più alto disponibile del dispositivo più idoneo elencato in .inf

  • BB (per i driver WDDM 1.1 e versioni precedenti) indica la versione DDI più elevata disponibile supportata dal dispositivo più idoneo elencato in .inf

  • CCCCC è un numero fino a cinque cifre compreso tra 0 e 65535 scelto dal fornitore

  • DDDDD è un numero fino a cinque cifre compreso tra 0 e 65535 scelto dal fornitore

Valori per il campo AA:

Modello driver Valore 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

Valori per il campo BB (WDDM 1.2 e versioni successive):

Livello di funzionalità DirectX Valore BB
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

Valori per il campo BB (WDDM 1.1 e versioni precedenti):

Versione DDI Valore BB
D3D11-DDI a livello di funzionalità 11_0 17
D3D11-DDI a livello di funzionalità 10 16
D3D10-DDI 15
D3D9 DDI 14

Esempi

Nota

Non è necessario inserire numeri con zeri iniziali, ad esempio 123 non è necessario essere rappresentati come 00123 per i campi CCCCC o DDDDD. Nelle versioni precedenti del sistema operativo Windows gli ultimi due campi erano 4 cifre, ad esempio CCCC.DDDD. Pertanto, gli esempi per le versioni dei driver precedenti a Windows 10 e WDDM 2.0 hanno solo 4 cifre.

  • Windows Vista WDDM 1.0:

    • I driver D3D9 DDI possono usare da 7.14.0000.0000 a 7.14.9999.9999
    • I driver D3D10 DDI possono usare da 7.15.0000.0000 a 7.15.9999.9999
  • Windows 7 WDDM 1.1:

    • I driver D3D9 DDI possono usare da 8.14.0000.0000 a 8.14.9999.9999
    • I driver D3D10 DDI possono usare da 8.15.0000.0000 a 8.15.9999.9999
    • D3D11 DDI con driver FL_10_0 possono usare da 8.16.0000.0000 a 8.16.9999.99999
    • D3D11 DDI con driver FL_11_0 possono usare da 8.17.0000.0000 a 8.17.99999.9999
  • Windows 8 WDDM 1.2:

    • FL_10_0 HW può usare da 9.15.0000.0000 a 9.15.9999.9999
    • FL_10_1 HW può usare da 9.16.0000.0000 a 9.16.9999.99999
    • FL_11_0 HW può usare da 9.17.0000.0000 a 9.17.9999.9999
    • FL_11_1 HW può usare da 9.18.0000.0000 a 9.18.9999.99999
  • Windows 8.1 WDDM 1.3:

    • FL_10_0 HW può usare da 10.15.0000.0000 a 10.15.9999.9999
    • FL_10_1 HW può usare da 10.16.0000.0000 a 10.16.9999.9999
    • FL_11_0 HW può usare da 10.17.0000.0000 a 10.17.9999.9999
    • FL_11_1 HW può usare da 10.18.0000.0000 a 10.18.9999.9999
  • Windows 10 WDDM 2.0:

    • FL_11_1 HW può usare da 20.18.0000.0000 a 20.18.65535.65535
    • FL_12_0 HW può usare da 20.19.0000.0000 a 20.19.65535.65535
    • FL_12_1 HW può usare da 20.20.0000.0000 a 20.20.65535.65535
  • Windows 10 WDDM 2.1:

    • FL_11_1 HW può usare da 20.18.0000.0000 a 21.18.65535.65535
    • FL_12_0 HW può usare da 20.19.0000.0000 a 21.19.65535.65535
    • FL_12_1 HW può usare da 20.20.0000.0000 a 21.20.65535.65535

Imposizione

Un test obbligatorio nella playlist di certificazione HLK per le build di Windows 10 superiore a 10586 applica le regole specificate in questo articolo. Il test è facoltativo per le versioni precedenti del sistema operativo. Per le build di Windows 10 dopo la versione 10586, la versione WDDM è stata aggiornata alla versione 2.1. Un altro modo per visualizzare questo è che il requisito obbligatorio si applica solo ai driver compilati per WDDM 2.1 o versione successiva.