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


Запрос на переименование выделения

Драйвер отображения в пользовательском режиме должен запросить, чтобы диспетчер видео-памяти переименовал выделение, связанное с поверхностью, когда приложение указывает отбросить содержимое поверхности как часть запроса на блокировку поверхности (например, буфер вершин). Среда выполнения Microsoft Direct3D передает флаг битового поля Отменить, чтобы указать, что она больше не требует текущего содержимого поверхности. Драйвер может запросить, чтобы диспетчер видео памяти выделил новую область памяти для обработки запроса блокировки, если текущее выделение, удерживающее содержимое поверхности, занято, вместо того чтобы останавливать поток приложения, пока текущая область не освободится.

Драйвер отображения в пользовательском режиме запрашивает, чтобы диспетчер видео памяти переименовала выделение, когда драйвер устанавливает член Discard структуры D3DDDICB_LOCKFLAGS в вызове функции pfnLockCb. Диспетчер видеопамяти определяет, следует ли переименовывать выделение памяти или приостановить работу приложения до тех пор, пока выделение не станет свободным, на основе того, занято ли выделение в данный момент, и в зависимости от текущего состояния памяти. При каждом переименовании выделения диспетчер памяти видео хранит список выделений, которые последовательно используются для блокировки доступа к выделению. Менеджер видеопамяти проходит по списку каждый раз, когда приложение удаляет содержимое распределения. Длина списка определяется требованиями приложения и давлением памяти. Диспетчер видеопамяти пытается сохранить список достаточно долго, чтобы избежать остановки потока приложения из-за запроса блокировки. Однако при нагрузке на память, диспетчер видео памяти может обрезать список, чтобы избежать дополнительного давления на память.

Чтобы наложить ограничение на длину списка переименований для выделения, драйвер задает член MaximumRenamingListLength структуры DXGK_ALLOCATIONINFO при создании выделения. Если драйвер задает значение MaximumRenamingListLength ненулевому значению, диспетчер памяти видео определяет соответствующую длину списка переименований без превышения ограничения, введенного драйвером. Если драйвер задает значение MaximumRenamingListLength равным 0, диспетчер памяти может увеличить размер списка переименований в любой размер, необходимый для повышения производительности.

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