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


Бюджеты места расположения процессов

В windows Display Driver Model (WDDM) версии 2 процессам будут назначены бюджеты на объем памяти, который они могут хранить в постоянном хранилище. Этот бюджет может меняться со временем, но обычно применяется только при нехватке памяти в системе. До Microsoft Direct3D 12 бюджет обрабатывается драйвером пользовательского режима в виде уведомлений об обрезке и ошибок MakeResident с STATUS_NO_MEMORY. Уведомление TrimToBudget , исключение и неудачные вызовы MakeResident возвращают последний бюджет в виде целочисленного значения NumBytesToTrim , указывающего, сколько необходимо обрезать, чтобы вписаться в новый бюджет.

Для приложений Direct3D 12 бюджет полностью обрабатывается приложением. Размер бюджета подразумевается в качестве подсказки, чтобы приложение знало, что нужно сделать. Используя размер бюджета в качестве подсказки, приложение может решить, сколько ресурсов необходимо сохранить, какое разрешение и качество ресурсов следует сохранить.

Для правильного управления этими бюджетами ядро должно знать, какая память должна участвовать в бюджете. В структуре DXGK_SEGMENTFLAGS2 есть новый бит ApplicationTarget, который необходимо задать для сегментов, которые драйвер режима ядра хочет включить в логику бюджетирования. Например, на дискретном графическом процессоре (GPU) с 1 сегментом виртуальной памяти, который подходит для использования приложениями, и 1 сегментом виртуальной памяти, который автоматически используется для специальных ресурсов, драйвер, скорее всего, пометит только основной сегмент VRAM как ApplicationTarget. Для интегрированных GPU обычно отмечается сегмент апертуры main. Количество сегментов, которые можно пометить как ApplicationTarget, не ограничено. Ядро объединит их вместе и предоставит приложению унифицированный размер.