Richiesta e uso della memoria di Surface
Il driver di visualizzazione in modalità utente riceve chiamate alla funzione CreateResource quando il runtime di Microsoft Direct3D richiede la creazione di un elenco di superfici. Il runtime Direct3D specifica un handle di risorse nell'elenco delle superfici usate dal driver di visualizzazione in modalità utente per richiamare il runtime. Il driver di visualizzazione in modalità utente crea un oggetto risorsa per rappresentare l'elenco di superfici, genera un handle univoco per questo oggetto e restituisce nuovamente l'handle al runtime Direct3D. Il runtime usa questo handle univoco nelle chiamate driver successive per identificare l'elenco di superfici. Il runtime identifica una determinata superficie specificando l'indice della superficie nella matrice contenuta nel membro pSurfList della struttura D3DDDIARG_CREATERESOURCE .
Poiché il driver di visualizzazione in modalità utente riceve l'handle di risorse definito dal driver nelle chiamate che fanno riferimento alla risorsa, il driver non è necessario per eseguire una ricerca di gestione costosa per individuare l'oggetto risorsa definito dal driver. Analogamente, in modo che il runtime non sia necessario anche per eseguire una ricerca di handle, il driver di visualizzazione in modalità utente usa l'handle di risorse definito dal runtime Direct3D quando il driver di visualizzazione in modalità utente chiama nuovamente nel runtime.
Il driver di visualizzazione in modalità utente chiama la funzione pfnAllocateCb per allocare memoria per le superfici. Nella chiamata pfnAllocateCb , il driver di visualizzazione in modalità utente può passare i dati privati per l'elenco delle superfici e per ogni singola superficie nei membri pPrivateDriverData delle strutture D3DDDICB_ALLOCATE e D3DDDI_ALLOCATIONINFO rispettivamente. Tuttavia, il driver di visualizzazione in modalità utente non può ricevere dati privati dai membri pPrivateDriverData . Il driver di visualizzazione in modalità utente può allocare memoria per questi dati privati e può liberare la memoria dopo che la chiamata pfnAllocateCb restituisce o può usare la memoria dello stack per passare questi dati privati. La funzione pfnAllocateCb restituisce al driver di visualizzazione in modalità utente un handle per ogni allocazione per ogni superficie allocata.
Nota Il driver di visualizzazione in modalità utente deve chiamare la funzione pfnAllocateCb una volta per ogni superficie condivisa per ogni dispositivo. Ad esempio, se il dispositivo 1 crea una superficie condivisa usata anche dai dispositivi 2, 3 e 4, i dispositivi 2, 3 e 4 devono anche chiamare pfnAllocateCb una volta per la superficie condivisa per recuperare l'handle di allocazione.
Il driver di visualizzazione in modalità utente deve tenere traccia di ogni superficie a ogni handle di allocazione, in genere mantenendo una tabella di handle di allocazione da superficie a allocazione. Il driver di visualizzazione in modalità utente deve archiviare ogni handle di allocazione all'interno dell'oggetto risorsa definito dal driver.
Quando il runtime Direct3D esegue un'operazione su una superficie allocata in precedenza (ad esempio, in una chiamata alla funzione Blt del driver di visualizzazione in modalità utente), il driver di visualizzazione in modalità utente riceve l'handle alla risorsa, possibilmente con un indice di superficie. Il driver di visualizzazione in modalità utente usa questo handle di risorse per recuperare l'oggetto risorsa definito dal driver. Il driver ottiene gli handle di allocazione archiviati nell'oggetto risorsa e li assembla nel buffer dei comandi. Il driver di visualizzazione in modalità utente usa i handle di allocazione che corrispondono alle superfici quando si chiama la funzione pfnRenderCb per inviare un buffer di comandi al driver miniport visualizzato. Il driver miniport visualizzato può chiamare la funzione DxgkCbGetHandleData per determinare quali allocazioni di superficie fa riferimento al driver di visualizzazione in modalità utente.