Condividi tramite


Novità dei driver di visualizzazione e grafica di Windows 10

Questa pagina descrive le novità dei driver di visualizzazione e grafica per Windows 10 versione 2004 (WDDM 2.7). Per visualizzare le funzionalità aggiunte nelle versioni precedenti di WDDM 2.X, vedere Novità delle versioni precedenti di WDDM 2.X.

Shader mesh

Gli shader mesh sono un mezzo per aumentare la flessibilità e le prestazioni della pipeline grafica di Direct3D 12 quando si usa la rasterizzazione. Agiscono come un nuovo sostituto per l'assembler di input, in particolare per le fasi degli shader di vertice e di geometria, sostituendo alcuni dei comportamenti a funzione fissa dell'assembler di input con comportamenti a funzione flessibile. Con gli shader mesh, le applicazioni possono effettuare il culling più presto e quindi in modo più efficiente rispetto all'assemblatore di input. Le primitive possono essere rimosse senza che i dati di indice vengano elaborati dalla GPU, il che è estremamente vantaggioso poiché i conteggi delle primitive delle applicazioni 3D aumentano sempre di più nel tempo.

Nel caso in cui sia collegato un pixel shader, le primitive in uscita da uno shader mesh verranno inserite direttamente nello stadio del pixel shader.

La funzionalità mesh shader introduce la fase di shader mesh insieme a una nuova fase: lo shader di amplificazione. Gli shader di amplificazione sostituiscono la fase di tassellatura GPU. Le applicazioni configurano lo shader di amplificazione per richiamare uno shader mesh alcune volte in base alle esigenze. Gli shader di amplificazione sono un passaggio facoltativo che consente a un'applicazione di controllare dinamicamente i livelli di dettaglio geometrico.

La funzionalità mesh shader prevede nuovi costrutti del linguaggio di ombreggiatura e modifiche di messaggistica unificata. Per la segnalazione della capacità del dispositivo di mesh shaders, è presente un campo denominato MeshShaderTier riportato tramite D3D12DDI_D3D12_OPTIONS_DATA_0073. Inoltre, poiché questo introduce due nuove fasi shader, ci sono due nuovi campi in D3D12DDIARG_CREATE_PIPELINE_STATE_0075, hMeshShader e hAmplificationShader. Per iniziare, c'è l'elenco dei comandi DDI PFND3D12DDI_DISPATCH_MESH_0074 e anche D3D12DDI_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH per il dispatch indiretto.

DirectX Raytracing (DXR) 1.1

WDDM 2.7 offre alcune nuove funzionalità e miglioramenti che si basano sulla versione iniziale di DXR in Direct3D 12.

  • Il raytracing "inline" è una forma alternativa di raytracing che non usa shader dinamici separati o tabelle di shader. Offre agli sviluppatori flessibilità e praticità in tutti quei casi in cui gli shader che utilizzano il raytracing in stile DXR 1.0, definiti "raytracing basato su shader dinamico", non si adattano. Il raytracing inline è disponibile in qualsiasi fase dello shader, inclusi gli shader di calcolo, i pixel shader e così via. Questo è menzionato qui come qualcosa disponibile con WDDM 2.7, anche se non corrisponde a una modifica DDI.

  • Le applicazioni possono chiamare DispatchRays tramite ExecuteIndirect, consentendo la configurazione del lavoro raytracing nella GPU. Ciò può essere utile per le applicazioni che cercano di ridurre, ordinare o regolare il lavoro di raytracing e usano shader per farlo. A questo scopo, è ora disponibile un valore di enumerazione D3D12DDI_INDIRECT_ARGUMENT_TYPE. Quando si usa l'invio di raytracing indiretto, ogni elemento del buffer indiretto di esecuzione è di tipo D3D12DDIARG_DISPATCH_RAYS_0054.

  • Il sovraccarico della creazione dello stato della pipeline per tenere conto di diverse combinazioni di shader è uno di questi problemi difficili nella grafica 3D. DXR 1.1 include qualcosa che può essere utile: add-to-state-object. AddToStateObject(), come viene esposto nell'API, consente alle applicazioni di aggiungere shader a un oggetto di stato esistente con sovraccarico della CPU proporzionale solo a ciò che viene aggiunto. Oltre a questo, ci sono due funzioni DDI del dispositivo: PFND3D12DDI_ADD_TO_STATE_OBJECT_0072 e PFND3D12DDI_CALC_PRIVATE_ADD_TO_STATE_OBJECT_SIZE_0072.

Per la creazione di report sulle funzionalità generali, è disponibile un nuovo valore di enumerazione D3D12DDI_RAYTRACING_TIER_1_1 usato per il livello di report 1.1.

Feedback del campionatore

Sampler Feedback è una funzionalità direct3D 12 per l'acquisizione e la registrazione di informazioni e posizioni di campionamento delle trame. Senza feedback del campionatore, questi dettagli sarebbero opachi per lo sviluppatore. Questa funzionalità offre alle applicazioni la possibilità di non sapere solo quale mip è stato campionato, ma di sapere dove si trovano tali mips. Le applicazioni potrebbero essere interessate a informazioni di campionamento, ad esempio:

  • sapere con precisione cosa caricare successivamente in un sistema di streaming delle texture o
  • sapere con precisione cosa deve essere ombreggiato in un sistema di rendering con ombreggiatura nello spazio delle texture.

Il feedback delle operazioni di esempio viene scritto in una "mappa di feedback" che funge da tipo di risorsa opaca che deve essere transcodificata per ottenere informazioni ispezionabili dall'applicazione. Per quanto riguarda la scrittura del feedback stesso, esistono costrutti HLSL nel modello di shader 6_5. La semantica è molto simile alla semantica per l'esempio di Texture2D e le relative varianti.

Anche se il feedback del campionatore usa bene i nuovi costrutti del linguaggio di ombreggiatura, comporta anche modifiche del driver in modalità utente. Per il controllo delle funzionalità del dispositivo, è presente un limite denominato SamplerFeedbackTier segnalato tramite D3D12DDI_D3D12_OPTIONS_DATA_0073. La creazione di risorse è stata modificata per accettare un nuovo campo, l'area mip del feedback del campionatore, di tipo D3D12DDI_MIP_REGION_0075. Oltre a questo, è disponibile anche un nuovo metodo di creazione del descrittore, PFND3D12DDI_CREATE_SAMPLER_FEEDBACK_UNORDERED_ACCESS_VIEW_0075.

Protezione del contenuto

Il supporto facoltativo delle risorse protette è stato aggiunto alle operazioni video Direct3D 12 in WDDM 2.7. In background, le risorse protette esistevano prima di WDDM 2.7, ma erano disponibili solo per la condivisione tra API e la grafica o il calcolo, non per il video.

Il supporto per le risorse protette non viene segnalato dal driver come un aspetto globale; è basato su ogni singola operazione. Se un driver segnala il supporto di risorse protette per una determinata operazione, significa che l'operazione può leggere e scrivere risorse protette e supporta la condivisione tra API se il tipo di risorsa lo consente. Un'altra cosa da ricordare è che se un driver richiede il supporto di risorse protette per un particolare formato, deve supportare anche tale formato come risorsa non protetta.

Con WDDM 2.7, i metodi di creazione delle risorse vengono modificati per accettare un'istanza di D3D12DDI_HPROTECTEDRESOURCESESSION facoltativa. Ai driver viene assegnato questo parametro al momento della creazione di oggetti per informare la configurazione e le allocazioni. Inoltre, i controlli del budget di memoria vengono rivisti per indicare se l'operazione userà o meno risorse protette. Quando il parametro protected-resource-session non è NULL, indica che l'operazione scriverà nelle risorse protette. Per scrivere in una risorsa non protetta, è necessario ricreare l'oggetto operazione.

I riferimenti alla stima del decodificatore e del movimento devono essere risorse protette quando l'output è una risorsa protetta. L'elaborazione video può leggere da una combinazione di risorse protette e non protette durante la scrittura in una risorsa protetta.

Prima di registrare una o più operazioni che scrivono in una risorsa protetta, è necessario chiamare PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030 con una sessione di risorse protetta non NULL. La chiamata a PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030 con NULL è obbligatoria prima di registrare una o più operazioni che scrivono su risorse non protette.

Per altre informazioni oltre alla presentazione guidata precedente delle modifiche DDI per la protezione del contenuto in WDDM 2.7, vedere D3D12DDI_VIDEO_DECODE_PROTECTED_RESOURCES_DATA_0072 come punto di partenza.

Miglioramento della reportistica del buffer cronologico per strumenti

WDDM 2.7 introduce una modifica DDI che consente agli strumenti di debug GPU di usare buffer di cronologia. Con questa modifica, un singolo invio di buffer dei comandi può contenere il lavoro corrispondente a più elenchi di comandi anziché a un solo elenco di comandi alla volta. Questa modifica consente agli strumenti di debug GPU di segnalare in modo più accurato le caratteristiche delle prestazioni delle applicazioni.

Questa funzionalità viene segnalata tramite D3D12DDICAPS_TYPE_0073_SUPPORT_BATCHED_MARKERS. È disponibile un nuovo D3DDDI_MARKERLOGTYPE di valore di enumerazione D3DDDIMLT_BATCHED, che corrisponde a D3DDDI_BATCHEDMARKERDATA. Le strutture dati degli eventi ETW sono state riviste per includere un numero di elementi D3DDDI_BATCHEDMARKERDATA quando sono di tipo D3DDDIMLT_BATCHED.

DisplayPort (DP) AUX/I2C

Il canale DP Ausiliario (AUX) fornisce l'accesso a DPCD (DP Configuration Data), ovvero un file di registrazione per dispositivo usato per leggere le funzionalità del dispositivo DP, il training dei collegamenti, l'individuazione della topologia, l'accesso al bus I2C e così via. Vedere DXGK_DP_INTERFACE come punto di partenza.