функция обратного вызова 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) |