PFND3DDDI_MAKERESIDENTCB función de devolución de llamada (d3dumddi.h)
pfnMakeResidentCb se usa para indicar al sistema operativo que agregue un recurso a la lista de residencia de dispositivos e incremente el recuento de referencias de residencia en esta asignación.
PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;
HRESULT Pfnd3dddiMakeresidentcb(
HANDLE hDevice,
D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}
hDevice
Identificador del dispositivo de visualización.
unnamedParam2
pData [in, out]
Puntero a una estructura de D3DDDI_MAKERESIDENT que describe las páginas de memoria que se van a convertir en residentes.
pfnMakeResidentCb devuelve uno de los siguientes valores:
Código devuelto | Descripción |
---|---|
S_OK | Todas las asignaciones se han realizado residentes en la GPU tras la salida de esta función y están listas para tener acceso inmediatamente. |
E_PENDING | Las asignaciones se han agregado a la lista de requisitos de residencia de dispositivos, pero todavía tienen operaciones de paginación pendientes para completarse antes de que se pueda acceder correctamente. En este caso, el controlador en modo de usuario debe esperar a que pagingFenceValue en el objeto de sincronización de barrera supervisada asociado a hPagingQueue se indique antes de enviar búferes de comandos que hacen referencia a asignaciones o un error de página de GPU. |
E_OUTOFMEMORY | El administrador de memoria de vídeo no puede hacer que todos los residentes de asignación solicitados. Cuando esto suceda, ninguna asignación en la lista proporcionada verá modificado su recuento de residencias. En otras palabras, se trata de una operación atómica en la que todas las asignaciones aumentan su recuento de residencias o ninguno de ellos. Además, NumBytesToTrim indica al controlador cuántos bytes se deben recortar de la lista de requisitos de residencia del dispositivo, llamando a pfnEvictCb, antes de intentar volver a realizar las asignaciones con errores residentes. El presupuesto de memoria asociado a una aplicación puede cambiar de forma asincrónica con la aplicación en ejecución. Como consecuencia de esto, el recorte del número solicitado de bytes no garantizará que el siguiente intento de realizar el conjunto de asignaciones residentes se realizará correctamente, ya que el presupuesto de memoria de la aplicación puede haber disminuido. Debido a esto, un controlador debe asegurarse de que intenta solicitar residencia en un bucle, recortar entre cada iteración, hasta que la solicitud se realice correctamente o el controlador haya recortado todo lo posible para avanzar en una sola operación y usar el recurso necesario en ese intento final. Si se produce un error en ese intento final, el dispositivo subyacente se producirá un error y el controlador en modo de usuario debe anular la solicitud y volver a la aplicación. El kernel no permitirá ningún envío adicional a ninguno de los contextos que pertenezcan a un dispositivo en caso de error. Para el controlador de modo de usuario de DirectX 12.0, pfnMakeResidentCb se comporta ligeramente de forma diferente porque ya no es responsable de recortar o paginar en las asignaciones. Esto se hace para asegurarse de que el estado de todas las asignaciones después de volver de la llamada siga siendo el mismo que antes de la llamada. Esto significa que, si E_OUTOFMEMORY se devuelve de la función : - Todas las asignaciones permanecen en su estado original. - Las asignaciones no se realizaron residentes. - PagingFenceValue debe omitirse. Si el controlador necesita realizar llamadas pfnMakeResidentCb en varios lotes para dar cabida a la traducción de recursos a asignación, el controlador debe deshacer las llamadas anteriores a pfnMakeResidentCb con llamadas equivalentes a pfnEvictCb y volver a propagar el código de error al tiempo de ejecución. |
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 10 |
Servidor mínimo compatible | Windows Server 2016 |
Plataforma de destino | Escritorio |
Encabezado | d3dumddi.h (incluya D3dumddi.h) |