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


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

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

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

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

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