Condividi tramite


Condivisione dell'archivio di backup con KMD

A partire da Windows 11 versione 22H2, l'API WDDM è stata estesa per consentire l'accesso a un archivio di backup dell'allocazione grafica dal driver in modalità kernel (KMD). Usando questa API, sia il driver in modalità utente (UMD) che il KMD possono accedere alla stessa memoria di allocazione. Questa funzionalità può essere usata quando UMD è in esecuzione nell'host o in una macchina virtuale usando la paravirtualizzazione GPU (GPU-PV).

Questa funzionalità è stata riconfermata a Windows 10 versione 20H1. L'DDI è disponibile per i driver WDDM 3.1 o versioni successive.

Allocazioni di grafica WDDM e archivi di backup

Ogni allocazione grafica nel modello WDDM ha un archivio di backup, ovvero un buffer di memoria di cui è stato eseguito il commit che contiene il contenuto di allocazione quando non è in memoria video.

Viene creata un'allocazione grafica chiamando D3DKMTCreateAllocation. UMD passa i dati privati per questa allocazione, che Dxgkrnl passa al KMD tramite una chiamata a DXGKDDI_CREATEALLOCATION. KMD restituisce i flag di allocazione desiderati a Dxgkrnl.

Verifica della disponibilità delle funzionalità

Per verificare se la funzionalità di condivisione dell'archivio di backup è disponibile, il Servizio di gestione delle chiavi deve prima chiamare uno dei callback seguenti con FeatureId impostato su DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD:

La funzionalità può essere usata solo se il callback ha esito positivo e Enable è impostato su TRUE.

Flusso di funzionalità

Dopo aver stabilito correttamente che la funzionalità è abilitata, UMD chiama D3DKMTCreateAllocation per creare un'allocazione visibile dalla CPU condivisa e indica al KMD tramite dati privati che l'allocazione deve essere condivisa con kmD. Nel corso di questa chiamata, si verifica quanto segue:

  • KMD imposta DXGK_ALLOCATIONINFOFLAGS2 flag ShareBackingStoreWithKmd quando il sistema operativo chiama il callback DXGKDDI_CREATEALLOCATION kmd. Se la funzionalità non è abilitata, kmd non deve impostare il flag ShareBackingStoreWithKmd .

  • Dxgkrnl chiama l'DXGKDDI_edizione Standard TALLOCATIONBACKINGSTORE DDI per assegnare un indirizzo in modalità kernel all'archivio di backup dell'allocazione.

  • UMD chiama D3DKMTLock2 per ottenere l'indirizzo in modalità utente dell'allocazione.

Proprietà dell'allocazione

L'allocazione creata in questo modo deve avere le proprietà seguenti:

  • L'allocazione può essere consentita solo nel segmento di memoria di sistema.
  • L'allocazione deve essere creata come condivisa.
  • L'allocazione non può usare la memoria di sistema esistente come archivio di backup.
  • UMD può eseguire qualsiasi operazione come per un'allocazione regolare.
    • UMD può chiamare D3DKMTLock2 per ottenere un puntatore all'allocazione.
    • UMD può chiamare D3DKMTMakeResident per rendere l'allocazione accessibile dalla GPU.