Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive come un driver WDDM può supportare la scansione delle risorse su più adattatori (CASO), riducendo il numero di copie tra le GPU e le risorse attraverso gli adattatori da due a una. Questa funzionalità è disponibile a partire da Windows Server 2022 e Windows 11.
Prestazioni pre-CASO (due percorsi di copia)
A partire da Windows 8.1 (WDDM 1.3), le applicazioni D3D9 e DXGI sono state in grado di usare il supporto per la presentazione tra schede in configurazioni a più schede, ad esempio sistemi ibridi. Con questo supporto, il rendering viene eseguito su un adattatore di rendering (in genere la GPU discreta) e poi vengono effettuate due copie per trasferire i contenuti all'adattatore di visualizzazione (in genere la GPU integrata) per la trasmissione al display.
- La copia 1 proviene dalla risorsa adattatore di rendering a una risorsa tra adattatori.
- La copia 2 proviene dalla risorsa dell'adattatore incrociato alla risorsa dell'adattatore di visualizzazione.
Queste copie possono limitare le prestazioni delle app, soprattutto per le app ottimizzate per la bassa latenza.
Uso di CASO per ottimizzare il modello di presentazione flip (percorso di copia singola)
Windows Server 2022 (WDDM 2.9) e i driver successivi possono dichiarare il supporto per un appropriato livello di risorse cross-adapter, consentendo allo stack di presentazione del sistema di ottimizzare le presentazioni cross-adapter. I driver devono dichiarare il supporto per questa funzionalità in base alla propria funzionalità di adattatore, indipendentemente dalla configurazione del dispositivo, in modo che il valore della funzionalità venga ridimensionato in tutte le configurazioni hardware applicabili. Questa scalabilità include, ma non solo, un singolo dispositivo GPU con collegamento dinamico di altre GPU esterne.
Se l'adattatore di visualizzazione supporta CASO, il sistema esegue solo la prima copia dalla superficie dell'adattatore di rendering alla superficie ad incrocio di adattatori e quindi esegue direttamente la scansione dalla superficie ad incrocio di adattatori. Questa funzionalità comporta una riduzione dell'elaborazione, della larghezza di banda, della potenza e della latenza.
La funzionalità CASO viene implementata per il runtime DXGI per il modello di presentazione flip.
Modifiche e aggiunte DDI per CASO
Indica il supporto a livelli per le risorse inter-adattatori
DXGI implementa tre livelli di supporto per le risorse tra adattatori:
- Copia da e verso risorse tra adattatori (livello più basso)
- Realizzazione di texture da risorse incrociate tra adattatori
- Analisi delle risorse cross-adapter (fascia più alta)
Ogni livello di supporto superiore deve garantire il supporto dei livelli sottostanti. Ad esempio, per richiedere il supporto per l'emissione delle risorse tra adattatori, il driver deve supportare anche la texturizzazione e la copia.
I driver dichiarano il supporto per ogni livello impostando i seguenti valori del campo di bit DXGK_VIDMMCAPS in DXGK_DRIVERCAPS. MemoryManagementCaps:
| Livello | Significato del termine 'tier' | Valore DXGK_VIDMMCAPS |
|---|---|---|
| Livello 1 | Supporto per la copia: copia da e verso risorse tra adattatori | CrossAdapterResource (reso accessibile alla modalità utente dal kernel grafico tramite il bit SupportCrossAdapterResource in D3DKMT_WDDM_1_3_CAPS |
| Livello 2 | Supporto delle texture: texture da risorse tra adattatori | CrossAdapterResourceTexture (include il supporto per la visualizzazione delle risorse shader, la visualizzazione di accesso non ordinato e la destinazione di rendering) |
| Livello 3 | Supporto CASO: Esportazione da risorse su adattatori incrociati | CrossAdapterResourceScanout |
Il kernel grafico non riesce ad avviare l'adattatore se non dimostra supporto in modalità sovraordinata per i tre livelli. Ad esempio, CrossAdapterResource deve essere impostato se è impostato CrossAdapterResourceTexture .
Requisiti di supporto di livello 1
Le risorse tra adattatori sono ancora definite come usate per il supporto della copia WDDM 1.3 di livello 1.
Requisiti di supporto di livello 2
I requisiti sono simili al driver in modalità utente D3D12 CrossAdapterRowMajorTextureSupported capability (cap); ovvero, il dispositivo supporta le visualizzazioni delle risorse shader, le visualizzazioni di accesso non ordinate ed esegue il rendering delle visualizzazioni di destinazione delle trame principali delle righe tra adattatori. Tuttavia, mentre CrossAdapterRowMajorTextureSupported di D3D12 richiede il supporto di tutti i formati di trama pertinenti, questo limite di livello 2 richiede solo il supporto per i formati DisplayScanOut elencati nei requisiti di supporto di livello 3, almeno.
Poiché il limite di D3D12 è un superset di questo limite di livello 2, D3D12CreateDevice verifica anche che il limite CrossAdapterResourceTexture del driver kernel sia impostato se è impostato il limite CrossAdapterRowMajorTextureSupported e non riesce la creazione del dispositivo in caso contrario.
Requisiti di supporto di livello 3
Il sistema deve essere in grado di eseguire le funzionalità di scorrimento supportate, come dichiarato dal driver in DXGK_FLIPCAPS, per le risorse tra adattatori delle specifiche minime seguenti:
- Dimensioni del buffer primario tra adattatori pari a 1920 x 1080 o inferiori
- Un formato pixel buffer di uno qualsiasi dei formati DisplayScanOut supportati. A partire da Windows 10 versione 20H1, questi formati sono:
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
Se il driver supporta l'analisi delle risorse tra adattatori di più formati di trama, deve supportare anche il texturing da tali formati, in base ai requisiti di supporto del livello.
Nota
Il runtime DXGI interroga il driver per il supporto a CrossAdapterResourceScanout. Qualora supportato, lo stack delle presentazioni scende e segue il percorso di copia singola. Pertanto, i driver che dichiarano il supporto per CrossAdapterResourceScanout sono necessari per supportare l'DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI. Inoltre, deve supportare tutte le DDI relative alla presentazione pertinenti per i primari cross-adapter delle specifiche minime sopra indicate. Alcuni esempi sono: pfnCreateResource, pfnCheckMultiplaneOverlaySupport e pfnPresentMultiplaneOverlay/pfnPresent1. Per altre informazioni, vedere Supporto della sovrimpressione multipla. Per ulteriori informazioni sull'uscita da CASO, vedere DDI del driver per l'ottimizzazione della presentazione.
Entrambi questi livelli hanno a disposizione test HLK per la verifica.
Supporto del flag StaticCheck per DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3
Il flag StaticCheck è stato aggiunto a DXGK_MULTIPLANE_OVERLAY_FLAGS in WDDM 3.0. Questo flag espande l'uso del DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI per il supporto CASO. Questo flag consente DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 di eseguire una query su un driver per determinare se il piano contrassegnato con il flag StaticCheck è in grado di eseguire l'analisi. Questa chiamata è una chiamata occasionale e non deve influire sul comportamento reale della presentazione. Di conseguenza, i driver che effettuano qualsiasi memorizzazione nella cache delle informazioni correnti da DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 non devono includere le informazioni delle chiamate DDI con un piano StaticCheck. Devono semplicemente eseguire la determinazione del supporto in modo autonomo o statico.
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 con il set di flag StaticCheck è garantito:
- Avere esattamente un piano contrassegnato con la bandiera
- Non contengono informazioni sul piano PostComposition
Una chiamata a DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 con il flag StaticCheck impostato viene usata dal processo dell'applicazione tramite DXGI durante la creazione del buffer, ad esempio durante la creazione della "catena di scambio" o ResizeBuffers, come miglior tentativo per determinare se CASO è supportato per la configurazione hardware corrente.
Caso speciale hybridIntegrated
È importante notare che i driver IbridiIntegrati sono progettati per avere il supporto di analisi di livello 3. A partire da WDDM 3.0, i driver HybridIntegrated sono necessari per dichiarare il supporto per CrossAdapterResourceScanout. Un test HLK verifica questo requisito.
I limiti ibridi esistenti potrebbero essere considerati deprecati in futuro. Pertanto, è fondamentale che il limite CrossAdapterResourceScanout sia disaccoppiato per consentire una maggiore flessibilità di evolversi in questo spazio in futuro. Di conseguenza, anche i driver che non sono IbridoIntegrato possono impostare il livello di supporto tra adattatori in modo appropriato.
Modifiche del kernel grafico
A partire da WDDM 2.9, sono state apportate le seguenti aggiunte/modifiche per il supporto delle risorse tra adattatori:
Il valore KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT è stato aggiunto all'enumerazione KMTQUERYADAPTERINFOTYPE esistente
Sono state aggiunte la struttura D3DKMT_CROSSADAPTERRESOURCE_SUPPORT e l'enumerazione D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER
Utilizzo di esempio:
D3DKMT_CROSSADAPTERRESOURCE_SUPPORT KernelSupport = {};
D3DKMT_QUERYADAPTERINFO QueryAdapterInfo;
QueryAdapterInfo.hAdapter = m_hAdapter;
QueryAdapterInfo.Type = KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT;
QueryAdapterInfo.pPrivateDriverData = &KernelSupport;
QueryAdapterInfo.PrivateDriverDataSize = sizeof( KernelSupport );
VERIFY_SUCCEEDED(D3DKMTQueryAdapterInfo(&QueryAdapterInfo));
// Use KernelSupport.SupportTier as appropriate
Driver DDI per l'ottimizzazione della presentazione
I driver usano le DDI seguenti per indicare se è supportata l'analisi tra schede:
capienza DXGK_VIDMMCAPS::CrossAdapterResourceScanout
Il sistema esegue una query anticipata su questo limite per determinare se il driver supporta la funzionalità CASO.
Se il driver supporta CASO, DXGI continua con il percorso CASO a copia singola; in caso contrario, DXGI torna al percorso a due copie.
-
Nel percorso CASO di copia singola, DXGI crea la risorsa tra adattatori come risorsa primaria sull'adattatore di visualizzazione attraverso pfnCreateResource. Il driver deve valutare in base alle proprietà della risorsa se può eseguire l'analisi da tale risorsa.
Se il driver supporta lo scan-out basato sulle proprietà delle risorse, DXGI continua con il percorso CASO a una copia. In caso contrario, il driver dovrebbe rinunciare ai processi di scansione restituendo DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT. In questo caso, DXGI ritorna alla modalità a doppia copia. Questo fallback dovrebbe verificarsi solo se le proprietà delle risorse superano i requisiti minimi elencati nei requisiti di supporto di livello 3.
pfnCheckMultiplaneOverlaySupport DDI
In base al comportamento corrente, Desktop Windows Manager (DWM) chiama pfnCheckMultiplaneOverlaySupport DDI del driver di visualizzazione per determinare in modo accurato se la superficie primaria può essere analizzata. Se supportato dal driver, viene eseguita l'analisi. In caso contrario, DWM torna alla modalità di composizione DWM.
È probabile che le presentazioni composte da DWM siano meno auspicabili rispetto a Independent Flip (iFlip) tramite il percorso a due copie o iFlip tramite il percorso di copia singola CASO. Di conseguenza, potrebbero verificarsi scenari di visualizzazione comuni in cui la larghezza di banda della presentazione è limitata, come nel caso di schermi ruotati o multipli, dove i driver potrebbero non riuscire a supportare in modo coerente pfnCheckMultiplaneOverlaySupport in DWM, risultando probabilmente in un'esperienza peggiore rispetto al percorso a due copie.
Per attenuare l'esperienza di fallback negativa, DXGI chiama pfnCheckMultiplaneOverlaySupport durante la creazione del buffer con la risorsa cross-adapter come un piano contrassegnato con il flag StaticCheck, per verificare con elevata precisione se il driver può effettuare l'output visivo in base alle caratteristiche della larghezza di banda note esistenti. Se supportata, DXGI continua con il percorso CASO mono-copia; in caso contrario, passa al percorso a due copie.
Test HLK
Sono stati aggiunti un requisito e una funzionalità WDDM 3.0 HLK, con i test HLK corrispondenti. Questo requisito è legato al supporto DXGK_VIDMMCAPS che i driver possono dichiarare; in particolare , CrossAdapterResourceTexture e CrossAdapterResourceScanout.
CrossAdapterResourceTexture
È stato aggiunto un test HLK per verificare le operazioni SRV (Shader Resource View) sulle risorse tra adattatori.
Per D3D12, è stato ampliato il test HLK "D3D12 - Cross Adapter Resource DX12" per il test Device.Graphics.AdapterRender.D3D12Core.CoreRequirement; in particolare, il caso di test CrossAdapterResource::CrossAdapterTextureSRV.
Aggiunto a questo test case HLK comprende la verifica della relazione superset tra la capabilità CrossAdapterResourceTexture di KMD e la capabilità D3D12 di UMD CrossAdapterRowMajorTextureSupported. Analogamente, la logica è stata aggiunta in D3D12CreateDevice per assicurarsi che, se è impostata la capacità UMD, anche la capacità del driver di livello 2 del kernel deve essere impostata, e deve fallire la creazione del dispositivo se non lo è.
Per D3D11, lo stesso caso di test è stato aggiunto al test HLK per Device.Graphics.WDDM30.Render.CrossAdapterScanOut; in particolare, D3DConf_11_CrossAdapterResource::CrossAdapterResourceSRV.
Analisi delle risorse tra adattatori
Sono stati aggiunti i test HLK seguenti:
Device.Graphics.WDDM30.Render.CrossAdapterScanOut
- Test HLK per verificare che i driver possano creare correttamente risorse primarie cross-adapter senza disattivare esplicitamente il comportamento di scan-out tramite il flag DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT.
- Test HLK per verificare che questi driver supportino il DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI.
- Un test manuale HLK per consentire a un tester di verificare manualmente che:
- La superficie analizzata tra adattatori è priva di corruzione visiva/artefatti o strappi imprevisti
- La superficie dell'adattatore incrociato viene scansionata direttamente senza alcuna trasformazione interna o copia preventiva.
Questi test end-to-end verificano naturalmente anche che CheckMultiplaneOverlaySupport e i DDIs Present siano supportati per le risorse tra adattatori. L'app di test manuale presenta alcuni requisiti hardware specifici, ad esempio un monitor ad alta risoluzione e una frequenza di aggiornamento elevata. Per altre informazioni, vedere il documento di riferimento che accompagna il test.
Device.Graphics.WDDM30.Render.CoreRequirement
- Test HLK per verificare che i driver che dichiarano la capacità HybridIntegrated dichiarino anche la capacità CrossAdapterResourceScanout.
System.Fundamentals.Graphics.HybridGraphics.MultiGPU
- Un test HLK basato sul sistema per consentire agli OEM di eseguire questi test sui dispositivi ibridi in grado di esercitare il percorso di una copia singola di DXGI come parte della convalida del sistema end-to-end.