Compartir a través de


Método ID3D12Device::MakeResident (d3d12.h)

Hace que los objetos resida para el dispositivo.

Sintaxis

HRESULT MakeResident(
       UINT           NumObjects,
  [in] ID3D12Pageable * const *ppObjects
);

Parámetros

NumObjects

Tipo: UINT

Número de objetos de la matriz ppObjects que se va a hacer residente para el dispositivo.

[in] ppObjects

Tipo: ID3D12Pageable*

Puntero a un bloque de memoria que contiene una matriz de punteros de interfaz ID3D12Pageable para los objetos.

Aunque la mayoría de los objetos D3D12 heredan de ID3D12Pageable, los cambios de residencia solo se admiten en los objetos siguientes: Montones de descriptores, Montones, Recursos confirmados y Montones de consultas

Valor devuelto

Tipo: HRESULT

Este método devuelve uno de los códigos de retorno de Direct3D 12.

Comentarios

MakeResident carga los datos asociados a un recurso del disco y vuelve a asignar la memoria del grupo de memoria adecuado del recurso. Se debe llamar a este método en el objeto que posee la memoria física.

Usa este método y Evict para administrar la memoria de vídeo de GPU, teniendo en cuenta que esto se realizó automáticamente en D3D11, pero ahora tiene que hacerlo la aplicación en D3D12.

MakeResident y Evict pueden ayudar a las aplicaciones a administrar el presupuesto de residencia en muchos adaptadores. MakeResident especifica datos de páginas en páginas y, a continuación, impide que la GPU pueda acceder a los datos. Expulsar habilita la página de salida.

Algunas arquitecturas de GPU no se benefician de la manipulación de residencia, debido a la falta de suficiente espacio de direcciones virtuales de GPU. Use D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT e IDXGIAdapter3::QueryVideoMemoryInfo para reconocer cuándo el espacio máximo de VA de GPU por proceso es demasiado pequeño o aproximadamente el mismo tamaño que el presupuesto de residencia. Para estas arquitecturas, el presupuesto de residencia siempre se restringirá por la cantidad de espacio de direcciones virtuales de GPU. Evict no liberará ningún presupuesto de residencia en tales sistemas.

Las aplicaciones deben controlar los errores MakeResident , incluso si parece haber suficiente presupuesto de residencia disponible. La fragmentación de memoria física y las peculiaridades de la arquitectura del adaptador pueden impedir el uso de intervalos contiguos grandes. Las aplicaciones deben liberar más presupuesto de residencia antes de intentarlo de nuevo.

MakeResident es ref-counted, de modo que se debe llamar a Evict la misma cantidad de veces que MakeResident antes de que Evict surta efecto. Los objetos que admiten la residencia se convierten en residentes durante la creación, por lo que una sola llamada de expulsará realmente el objeto.

Las aplicaciones deben usar barreras para asegurarse de que la GPU no usa objetos no residentes. MakeResident debe devolver antes de que la GPU ejecute una lista de comandos que haga referencia al objeto . Se debe llamar a Evict después de que la GPU termine de ejecutar una lista de comandos que haga referencia al objeto .

Los objetos expulsados siguen usando la misma dirección virtual de GPU y la misma cantidad de espacio de direcciones virtuales de GPU. Por lo tanto, los descriptores de recursos y otras referencias de direcciones virtuales de GPU no se invalidan después de expulsar.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado d3d12.h
Library D3D12.lib
Archivo DLL D3D12.dll

Consulte también

ID3D12Device