PFND3DDDI_MAKERESIDENTCB funzione di callback (d3dumddi.h)
pfnMakeResidentCb viene usato per indicare al sistema operativo di aggiungere una risorsa all'elenco di residenza dei dispositivi e incrementare il conteggio dei riferimenti di residenza per questa allocazione.
Sintassi
PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;
HRESULT Pfnd3dddiMakeresidentcb(
HANDLE hDevice,
D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}
Parametri
hDevice
Handle per il dispositivo di visualizzazione.
unnamedParam2
pData [in, out]
Puntatore a una struttura D3DDDI_MAKERESIDENT che descrive le pagine di memoria da residente.
Valore restituito
pfnMakeResidentCb restituisce uno dei valori seguenti:
codice restituito | Descrizione |
---|---|
S_OK | Tutte le allocazioni sono state effettuate residente sulla GPU all'uscita da questa funzione e sono pronte per l'accesso immediato. |
E_PENDING | Le allocazioni sono state aggiunte all'elenco dei requisiti di residenza dei dispositivi, ma hanno ancora operazioni di paging in sospeso da completare prima di poter accedere correttamente. In questo caso, il driver in modalità utente deve attendere che pagingFenceValue sull'oggetto di sincronizzazione del recinto monitorato associato a hPagingQueue venga segnalato prima di inviare buffer dei comandi che fanno riferimento alle allocazioni o a un errore di pagina GPU. |
E_OUTOFMEMORY | La gestione della memoria video non può rendere residente ogni allocazione richiesta. In questo caso, nessuna allocazione nell'elenco fornito visualizzerà il numero di residenza modificato. In altre parole, si tratta di un'operazione atomica in cui tutte le allocazioni ottengono il loro conteggio di residenza aumentato o nessuno di essi. Inoltre, NumBytesToTrim indica al driver il numero di byte da tagliare dall'elenco dei requisiti di residenza del dispositivo chiamando pfnEvictCb, prima di tentare di eseguire nuovamente le allocazioni non riuscite residenti. Il budget di memoria associato a un'applicazione può cambiare in modo asincrono con l'applicazione in esecuzione. Di conseguenza, il taglio del numero di byte richiesto non garantisce che il successivo tentativo di effettuare il set di allocazioni residenti avrà esito positivo perché il budget di memoria per l'applicazione potrebbe essere diminuito. Per questo motivo, un driver deve assicurarsi che tenti la richiesta di residenza in un ciclo, tagliando tra ogni iterazione, fino a quando la richiesta ha esito positivo o il driver ha tagliato tutto il possibile per eseguire lo stato di avanzamento in un'unica operazione e usare la risorsa necessaria per tale tentativo finale. Se il tentativo finale ha esito negativo, il dispositivo sottostante verrà inserito in errore e il driver in modalità utente deve interrompere la richiesta e tornare all'applicazione. Nessun ulteriore invio a uno dei contesti appartenenti a un dispositivo in errore sarà consentito dal kernel. Per il driver in modalità utente DirectX 12.0, pfnMakeResidentCb si comporta in modo leggermente diverso perché non è più responsabile del taglio o del paging nelle allocazioni. Questa operazione viene eseguita per garantire che lo stato di tutte le allocazioni dopo la restituzione dalla chiamata rimanga invariato rispetto a prima della chiamata. Ciò significa che se E_OUTOFMEMORY viene restituito dalla funzione : - Tutte le allocazioni rimangono nello stato originale. - Le allocazioni non sono state effettuate residenti. - PagingFenceValue deve essere ignorato. Se il driver deve eseguire chiamate pfnMakeResidentCb in più batch per supportare la conversione da risorsa a allocazione, il driver deve annullare qualsiasi chiamata precedente a pfnMakeResidentCb con chiamate equivalenti a pfnEvictCbe propagare il codice di errore al runtime. |
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows 10 |
server minimo supportato | Windows Server 2016 |
piattaforma di destinazione | Desktop |
intestazione | d3dumddi.h (include D3dumddi.h) |