Поделиться через


Метод ID3D12Device::MakeResident (d3d12.h)

Делает объекты резидентами для устройства.

Синтаксис

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

Параметры

NumObjects

Тип: UINT

Количество объектов в массиве ppObjects , которые необходимо сделать резидентными для устройства.

[in] ppObjects

Тип: ID3D12Pageable*

Указатель на блок памяти, содержащий массив указателей интерфейса ID3D12Pageable для объектов .

Несмотря на то, что большинство объектов D3D12 наследуют от ID3D12Pageable, изменения расположения поддерживаются только в следующих объектах: кучи дескриптора, кучи, зафиксированные ресурсы и кучи запросов.

Возвращаемое значение

Тип: HRESULT

Этот метод возвращает один из кодов возврата Direct3D 12.

Комментарии

MakeResident загружает данные, связанные с ресурсом, с диска и повторно выделяет память из соответствующего пула памяти ресурса. Этот метод должен вызываться для объекта, которому принадлежит физическая память.

Используйте этот метод и вытеснение для управления видеопамяти GPU, отметив, что это было сделано автоматически в D3D11, но теперь должно выполняться приложением в D3D12.

MakeResident и Evict могут помочь приложениям управлять бюджетом места проживания на многих адаптерах. MakeResident явно записывает данные в страницы, а затем исключает выход страницы, чтобы GPU смог получить доступ к данным. Вытеснение позволяет вытащить страницу.

Некоторые архитектуры GPU не получают преимуществ от операций с расположением из-за отсутствия достаточного виртуального адресного пространства GPU. Используйте D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT и IDXGIAdapter3::QueryVideoMemoryInfo , чтобы распознать, когда максимальный объем виртуальной машины GPU на процесс слишком мал или примерно совпадает с бюджетом расположения. Для таких архитектур бюджет расположения всегда будет ограничен объемом виртуального адресного пространства GPU. Выселение не освободит какой-либо бюджет на проживание в таких системах.

Приложения должны обрабатывать сбои MakeResident , даже если имеется достаточный бюджет на место жительства. Фрагментация физической памяти и причуды архитектуры адаптера могут препятствовать использованию больших смежных диапазонов. Приложения должны освободить больше бюджета на место жительства, прежде чем пытаться повторить попытку.

MakeResident считается ссылочной, поэтому выселение должно вызываться столько же раз, что и MakeResident , прежде чем выселение вступит в силу. Объекты, поддерживающие местонахождение, становятся резидентами во время создания, поэтому один вызов вытеснения фактически вытеснит объект.

Приложения должны использовать ограждения, чтобы гарантировать, что GPU не использует объекты, не являющиеся резидентами. MakeResident должен вернуться, прежде чем GPU выполнит список команд, ссылающийся на объект . Исключение должно вызываться после того, как GPU завершит выполнение списка команд, ссылающихся на объект.

Вытеснимые объекты по-прежнему используют один и тот же виртуальный адрес GPU и тот же объем виртуального адресного пространства GPU. Поэтому дескрипторы ресурсов и другие ссылки на виртуальные адреса GPU не становятся недействительными после вытеснения.

Требования

Требование Значение
Целевая платформа Windows
Header d3d12.h
Библиотека D3D12.lib
DLL D3D12.dll

См. также раздел

ID3D12Device