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


функция обратного вызова PFND3DDDI_MAKERESIDENTCB (d3dumddi.h)

pfnMakeResidentCb используется для указания ОС добавить ресурс в список расположения устройств и увеличить количество ссылок на место расположения для этого выделения.

Синтаксис

PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;

HRESULT Pfnd3dddiMakeresidentcb(
  HANDLE hDevice,
  D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}

Параметры

hDevice

Дескриптор устройства отображения.

unnamedParam2

pData [in, out]

Указатель на структуру D3DDDI_MAKERESIDENT, описывающую страницы памяти для создания резидента.

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

pfnMakeResidentCb возвращает одно из следующих значений:

код возврата описание
S_OK Все выделения были выделены на GPU после выхода из этой функции и готовы немедленно получить доступ.
E_PENDING Выделения были добавлены в список требований к месту расположения устройства, но все еще имеют ожидающие операции разбиения на страницы до успешного доступа. В этом случае драйвер пользовательского режима должен ожидать, пока PagingFenceValue на отслеживаемом объекте синхронизации ограждения, связанном с hPagingQueue, должен быть сигнализирован перед отправкой буферов команд, которые ссылаются на выделения или сбой страницы GPU.
E_OUTOFMEMORY Диспетчер памяти видео не может сделать каждый запрошенный резидент выделения. В этом случае в указанном списке не будет изменено их количество мест проживания. В другом слове это атомарная операция, где либо все выделение получает их число мест проживания увеличилось, либо ни один из них. Кроме того, NumBytesToTrim указывает драйверу, сколько байтов необходимо обрезать из списка требований к месту расположения устройства, вызвав pfnEvictCb, прежде чем пытаться снова сделать неудающиеся выделения.
Бюджет памяти, связанный с приложением, может асинхронно изменяться с запущенным приложением. В результате обрезка запрошенного количества байтов не гарантирует, что следующая попытка сделать набор выделенных ресурсов будет выполнена успешно, так как бюджет памяти для приложения, возможно, снизился. Из-за этого драйвер должен убедиться, что он пытается выполнить запрос на размещение в цикле, обрезка между каждой итерацией, пока запрос либо успешно завершится, либо драйвер обрезал все возможное, чтобы выполнить переадресацию по одной операции и использовать необходимый ресурс для этой последней попытки. Если последняя попытка завершается ошибкой, базовое устройство будет помещено в ошибку, и драйвер пользовательского режима должен прервать запрос и вернуться в приложение. Никакие дополнительные отправки в любой из контекстов, принадлежащих устройству в ошибке, не будут разрешены ядром.
Для драйвера пользовательского режима DirectX 12.0 pfnMakeResidentCb работает немного по-разному, так как он больше не отвечает за обрезку или разбиение по страницам в выделениях. Это делается, чтобы убедиться, что состояние всех выделений после возвращения из вызова остается неизменным, как и перед вызовом. Это означает, что если E_OUTOFMEMORY возвращается из функции:
- Все выделения остаются в исходном состоянии.
- Выделение не было сделано резидентом.
— PagingFenceValue следует игнорировать.
Если драйверу необходимо выполнить вызовы pfnMakeResidentCb в нескольких пакетах для размещения перевода ресурсов в выделение ресурсов, драйвер должен отменить все предыдущие вызовы pfnMakeResidentCb с эквивалентными вызовами pfnEvictCbи распространить код ошибки обратно в среду выполнения.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10
минимальный поддерживаемый сервер Windows Server 2016
целевая платформа Настольный
заголовка d3dumddi.h (include D3dumddi.h)

См. также

D3DDDI_MAKERESIDENT

pfnEvictCb