Condivisione dell'archivio di backup con KMD

A partire da Windows 11 versione 22H2 (WDDM 3.1), WDDM è stato esteso per consentire l'accesso a un archivio di backup dell'allocazione grafica dal driver in modalità kernel (KMD). Un archivio di backup si riferisce a un buffer di memoria di cui è stato eseguito il commit che contiene il contenuto di un'allocazione grafica quando non si trova nella memoria video.

Questa funzionalità consente sia il driver in modalità utente (UMD) sia la possibilità di 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 con back-porting 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. Viene creata un'allocazione grafica quando UMD chiama la funzione D3DKMTCreateAllocation di Dxgkrnl. UMD passa i dati privati per questa allocazione, che Dxgkrnl passa al KMD tramite una chiamata a DxgkddiCreateAllocation. 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à

Una volta che kmD determina 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 DxgkddiCreateAllocation del KMD. Se la funzionalità non è abilitata, kmd non deve impostare il flag ShareBackingStoreWithKmd .

  • Dxgkrnl chiama il DXGKDDI_SETALLOCATIONBACKINGSTORE DDI per assegnare un indirizzo in modalità kernel al servizio 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.