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 del dispositivo e incremente el recuento de referencias de residencia 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 residente.
pfnMakeResidentCb devuelve uno de los siguientes valores:
código de retorno | 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 del dispositivo, pero aún tienen operaciones de paginación pendientes para completarse antes de que se pueda acceder correctamente. En este caso, el controlador del modo de usuario debe esperar a que el pagingFenceValue en el objeto de sincronización de barrera supervisado asociado con hPagingQueue se indique antes de enviar búferes de comandos que hagan 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 sucede, 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 ninguna de ellas. 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 residente 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 pondrá en 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 pertenecen a un dispositivo en error. Para el controlador del modo de usuario de DirectX 12.0, pfnMakeResidentCb se comporta ligeramente de manera diferente porque ya no es responsable de recortar o paginar en asignaciones. Esto se hace para asegurarse de que el estado de todas las asignaciones después de devolver desde la llamada sigue siendo el mismo que antes de la llamada. Esto significa que si se devuelve E_OUTOFMEMORY de la función : - Todas las asignaciones permanecen en su estado original. - Las asignaciones no se hicieron residentes. - Se debe omitir PagingFenceValue. 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 pfnEvictCby propagar el código de error al entorno de ejecución. |
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 10 |
servidor mínimo admitido | Windows Server 2016 |
de la plataforma de destino de | Escritorio |
encabezado de | d3dumddi.h (incluya D3dumddi.h) |