Condividi tramite


Supporto dell'analisi delle risorse tra adattatori (CASO)

Prestazioni pre-CASO (percorso a due copie)

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 una scheda di rendering (in genere la GPU discreta) e quindi vengono eseguite due copie per ottenere il contenuto della scheda di visualizzazione (in genere la GPU integrata) per l'analisi sullo schermo.

  • La copia 1 proviene dalla risorsa dell'adattatore di rendering a una risorsa tra schede.
  • La copia 2 proviene dalla risorsa tra adattatori alla risorsa dell'adattatore di visualizzazione.

Queste copie possono limitare le prestazioni delle app, in particolare 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 livello di risorse tra schede appropriato, consentendo allo stack di presentazioni del sistema di ottimizzare i regali tra schede. 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. Questo ridimensionamento include, ma non è limitato, 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 dell'adattatore incrociato e quindi esegue direttamente l'analisi dalla superficie dell'adattatore incrociato. 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

Indicazione del supporto del livello per le risorse tra schede

DXGI implementa tre livelli di supporto per le risorse tra schede:

  1. Copia da e verso risorse tra schede (livello più basso)
  2. Texturing da risorse tra adattatori
  3. Analisi delle risorse tra schede (livello più alto)

Ogni livello di supporto superiore deve garantire il supporto dei livelli sottostanti. Ad esempio, per richiedere il supporto per l'analisi delle risorse tra schede, il driver deve supportare anche il texturing e la copia.

I driver dichiarano il supporto per ogni livello impostando i valori di campo di bit DXGK_VIDMMCAPS seguenti in DXGK_DRIVERCAPS. MemoryManagementCaps:

Livello Significato livello valore DXGK_VIDMMCAPS
Livello 1 Supporto per la copia: copia da e verso risorse tra schede CrossAdapterResource (esposto alla modalità utente dal kernel grafico tramite il bit SupportCrossAdapterResource in D3DKMT_WDDM_1_3_CAPS
Livello 2 Supporto trama: trama da risorse tra adattatori) CrossAdapterResourceTexture (include il supporto per la visualizzazione risorse shader, la visualizzazione di accesso non ordinato e la destinazione di rendering)
Livello 3 Supporto CASO: analisi dalle risorse tra schede CrossAdapterResourceScanout

Il kernel grafico non riesce l'avvio dell'adattatore se non indica il supporto in modo superset 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 allo stesso modo, come usato per il supporto della copia wdDM 1.3 di livello 1.

Requisiti di supporto di livello 2

I requisiti sono simili alla funzionalità CrossAdapterRowMajorTextureSupported (cap) del driver in modalità utente D3D12; 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 tra le righe principali dell'adattatore. Tuttavia, mentre crossadapterRowMajorTextureSupported di D3D12 richiede il supporto di tutti i formati di trama pertinenti, questo limite di livello 2 richiede solo il supporto nei 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 del 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 capovolgimento supportate, come dichiarato dal driver in DXGK_FLIPCAPS, per le risorse tra adattatori delle specifiche minime seguenti:

  • Dimensioni del buffer primario tra schede pari a 1920 x 1080 o inferiori
  • Formato pixel del 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 esegue una query sul driver per il supporto CrossAdapterResourceScanout . Se supportato, lo stack di presentazioni scende verso il basso nel 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 correlate alla presentazione pertinenti per le primarie tra schede delle specifiche minime precedenti. Alcuni esempi sono: pfnCreateResource, pfnCheckMultiplaneOverlaySupport e pfnPresentMultiplaneOverlay/pfnPresent1. Per altre informazioni, vedere Supporto della sovrimpressione multiplane. Per altre informazioni sull'interruzione di CASO, vedere DDI del driver per l'ottimizzazione della presentazione.

Entrambi questi livelli hanno a disposizione test HLK associati 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 eseguono una memorizzazione nella cache delle informazioni presenti da DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 non devono includere le informazioni delle chiamate DDI con un piano StaticCheck . Devono solo 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 set di flag StaticCheck viene usata dal processo dell'app da DXGI durante la creazione del buffer, ad esempio durante la creazione di swapchain o ResizeBuffers, come tentativo migliore per determinare se CASO è supportato per la configurazione hardware corrente.

Caso speciale HybridIntegrated

È importante notare che i driver HybridIntegrated sono progettati per supportare il livello 3 di analisi. 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 HybridIntegrated possono impostare il livello di supporto tra schede in base alle esigenze.

Modifiche del kernel grafico

A partire da WDDM 2.9 sono state apportate le aggiunte/modifiche seguenti per il supporto delle risorse tra schede:

Esempio di utilizzo:

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

DDI driver per l'ottimizzazione della presentazione

I driver usano le DDI seguenti per indicare se è supportata l'analisi tra schede:

  • DXGK_VIDMMCAPS::CrossAdapterResourceScanout cap

    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 di copia unica; in caso contrario, DXGI esegue il fallback al percorso a due copie.

  • pfnCreateResource DDI

    Nel percorso CASO di copia singola, DXGI crea la risorsa tra schede come primaria nella scheda di visualizzazione, tramite pfnCreateResource. Il driver deve valutare in base alle proprietà della risorsa se può eseguire l'analisi da tale risorsa.

    Se il driver supporta l'analisi in base alle proprietà delle risorse, DXGI continua con il percorso CASO di copia singola. In caso contrario, il driver deve rifiutare esplicitamente le analisi restituendo DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT. In questo caso, DXGI esegue il fallback al percorso di copia due. Questo fallback dovrebbe verificarsi solo se le proprietà delle risorse superano i requisiti minimi elencati nei requisiti di supporto di livello 3.

  • pfnCheckMultiplaneOverlaySupport DDI

    Per ogni 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, si verifica l'analisi. In caso contrario, DWM torna alla modalità di composizione DWM.

    Si noti che i regali composti da DWM sono probabilmente meno auspicabili rispetto a Independent Flip (iFlip) tramite il percorso di due copie o iFlip tramite il percorso CASO di una copia. Di conseguenza, potrebbero esserci scenari di visualizzazione comuni in cui la larghezza di banda della presentazione è limitata, ad esempio la rotazione o più visualizzazioni, in cui i driver potrebbero riuscire in modo coerente pfnCheckMultiplaneOverlaySupport in DWM, probabilmente causando un'esperienza più scarsa rispetto al percorso di due copie.

    Per attenuare l'esperienza di fallback negativo, DXGI chiama pfnCheckMultiplaneOverlaySupport durante la creazione del buffer con la risorsa tra schede come piano contrassegnato con il flag StaticCheck , per verificare con accuratezza elevata se il driver può eseguire l'analisi in base alle caratteristiche della larghezza di banda note esistenti. Se supportato, DXGI continua con il percorso CASO one-copy; in caso contrario, torna al percorso di due copie.

Test HLK

Sono stati aggiunti requisiti e funzionalità WDDM 3.0 HLK, con i relativi 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 di visualizzazione risorse shader (SRV) sulle risorse tra schede.

  • Per D3D12, è stato aggiunto il test HLK "D3D12 - Cross Adapter RESOURCE DX12" per Device.Graphics.AdapterRender.D3D12Core.CoreRequirement test; in particolare, il test case di test CrossAdapterResource::CrossAdapterTextureSRV.

    Aggiunto a questo test case HLK è la verifica della relazione superset tra il limite crossAdapterResourceTexture KMD e D3D12 UMD CrossAdapterRowMajorTextureSupported . Analogamente, la logica è stata aggiunta in D3D12CreateDevice per assicurarsi che se il limite UMD è impostato, il limite del driver del livello 2 del kernel deve essere impostato anche e non è possibile creare il dispositivo se non lo fa.

  • Per D3D11, il test case precedente è 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 risorse primarie tra schede senza rifiutare esplicitamente il comportamento di analisi tramite il flag di DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT .
    • Test HLK per verificare che questi driver supportino l'DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI.
    • Test manuale di HLK per un tester per verificare manualmente che:
      • La superficie dell'adattatore incrociato analizzato è libera di danneggiamento/artefatti visivi o di strappi imprevisti
      • La superficie dell'adattatore incrociato viene analizzata direttamente senza trasformazioni interne o copie precedenti.

    Questi test end-to-end verificano naturalmente anche che le DDI CheckMultiplaneOverlaySupport e Present DDI siano supportate per le risorse tra schede. L'app di test manuale presenta alcuni requisiti hardware specifici, ad esempio una risoluzione elevata e un monitoraggio della frequenza di aggiornamento elevato. Per altre informazioni, vedere il documento di riferimento che accompagna il test.

  • Device.Graphics.WDDM30.Render.CoreRequirement

    • Un test HLK per verificare che i driver che dichiarano il limite IbridoIntegrated dichiarano anche il limite CrossAdapterResourceScanout .
  • System.Fundamentals.Graphics.HybridGraphics.MultiGPU

    • Un test HLK basato sul sistema per consentire alle macchine virtuali di eseguire questi test nei dispositivi ibridi in grado di esercitare il percorso di copia uno-copia DXGI come parte della convalida del sistema end-to-end.