Condividi tramite


PFND3DDDI_MAKERESIDENTCB funzione di callback (d3dumddi.h)

pfnMakeResidentCb viene usato per indicare al sistema operativo di aggiungere una risorsa all'elenco di residenza del dispositivo e incrementare il conteggio dei riferimenti di residenza su 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 rendere residenti.

Valore restituito

pfnMakeResidentCb restituisce uno dei valori seguenti:

Codice restituito Descrizione
S_OK Tutte le allocazioni sono state effettuate in base alla 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 del dispositivo, 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 della recinzione monitorato associato a hPagingQueue venga segnalato prima di inviare buffer di comando che fanno riferimento alle allocazioni o a un errore di pagina DELLA GPU.
E_OUTOFMEMORY La gestione memoria video non può effettuare ogni residente dell'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 un aumento del numero di residenza 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.
Il budget di memoria associato a un'applicazione può cambiare in modo asincrono con l'applicazione in esecuzione. Di conseguenza, il ridimensionamento del numero richiesto di byte non garantisce che il successivo tentativo di rendere il set di allocazioni residenti avrà esito positivo perché il budget di memoria per l'applicazione potrebbe essere diminuito. A causa di questo driver, è necessario assicurarsi che tenti la richiesta di residenza in un ciclo, tagliando tra ogni iterazione, fino a quando la richiesta non riesce o il driver ha tagliato tutto ciò che può eventualmente 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 dovrebbe 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 assicurarsi che lo stato di tutte le allocazioni dopo la restituzione dalla chiamata rimanga invariato 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 rese residenti.
- PagingFenceValue deve essere ignorato.
Se il driver deve eseguire chiamate pfnMakeResidentCb in più batch per gestire la conversione da risorsa a allocazione, il driver deve annullare le chiamate precedenti a pfnMakeResidentCb con chiamate equivalenti a pfnEvictCb e propagare nuovamente il codice di errore al runtime.

Requisiti

Requisito Valore
Client minimo supportato Windows 10
Server minimo supportato Windows Server 2016
Piattaforma di destinazione Desktop
Intestazione d3dumddi.h (include D3dumddi.h)

Vedi anche

D3DDDI_MAKERESIDENT

pfnEvictCb