Apertura host CPU
Per le unità di elaborazione grafica discrete del sistema operativo a 32bit, che non supportano barra ridimensionabile o quando il ridimensionamento della barra del buffer del frame ha esito negativo, Windows Display Driver Model (WDDM) v2 offrirà un meccanismo alternativo in base al quale è possibile accedere in modo efficiente a una GPU discreta VRAM. Per le GPU, che supportano uno spazio indirizzi BAR programmabile, viene introdotta una nuova funzionalità apertura host CPU in WDDM v2 per astrarre tale funzionalità.
Quando si espone un'apertura host della CPU, il driver in modalità kernel compila una nuova struttura di caps DXGK_CPUHOSTAPERTURE per ogni segmento che supporta un'apertura host CPU. Ciò definisce le dimensioni dell'apertura host della CPU, che consente al driver di riservare alcune delle barre per scopi interni. Le dimensioni della pagina sono uguali alle pagine GPU del segmento di memoria.
Il driver in modalità kernel espone quindi due nuove interfacce del driver di dispositivo (DDIs) per gestire lo spazio degli indirizzi BAR, in particolare DxgkDdiMapCpuHostAperture e DxgkDdiUnmapCpuHostAperture.
La memoria per la tabella di pagina dietro l'apertura dell'host CPU viene gestita dal driver e dal programma di installazione all'inizio del driver durante l'inizializzazione del driver. Entrambi dxgkDdiMapCpuHostAperture e DxgkDdiUnmapCpuHostAperture devono essere operativi immediatamente dopo l'enumerazione segmento e vengono usati durante l'inizializzazione della gestione memoria video per eseguire il mapping dell'indirizzo virtuale della CPU alla directory della pagina e alla tabella di pagina del processo di paging del sistema durante l'inizializzazione della scheda.
Quando è necessario l'accesso della CPU a un segmento di memoria, la gestione memoria video riserva pagine nell'apertura host della CPU e esegue il mapping delle pagine dei segmenti di memoria. come illustrato di seguito.
Nella configurazione della scheda di visualizzazione collegata le cose sono simili, ad eccezione del seguente.
- L'allocazione predefinita o LinkMirrored viene sempre mappata a GPU0.
- L'allocazione LinkInstanced ha un intervallo di indirizzi virtuali di AllocationSize*NumberOfGPUInLink associato a loro con varie parti dell'allocazione mappate a GPU diverse.
Questo è illustrato di seguito: