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


Инициализация использования сегментов памяти

Сегменты памяти в контексте модели драйвера дисплея для Windows Vista и более поздних версий (WDDM) описывают адресное пространство графического блока обработки (GPU) для диспетчера видеопамя. Сегменты памяти обобщают и виртуализируют ресурсы видеопамять. Сегменты памяти настраиваются в соответствии с типами памяти, поддерживаемыми оборудованием (например, память буфера кадров или диафрагма системной памяти).

Чтобы инициализировать использование сегментов памяти, подсистема графического ядра Microsoft DirectX (Dxgkrnl.sys) вызывает функцию DxgkDdiQueryAdapterInfo драйвера дисплея miniport. Чтобы драйвер мини-порта дисплея возвращал сведения об сегментах памяти из вызова DxgkDdiQueryAdapterInfo , графическая подсистема указывает значение DXGKQAITYPE_QUERYSEGMENT или DXGKQAITYPE_QUERYSEGMENT3 в элементе Type структуры DXGKARG_QUERYADAPTERINFO .

Графическая подсистема дважды вызывает функцию DxgkDdiQueryAdapterInfo драйвера дисплея miniport дважды для получения сведений о сегменте. Первый вызов DxgkDdiQueryAdapterInfo получает количество сегментов, поддерживаемых драйвером, а второй вызов получает подробные сведения о каждом сегменте. В вызовах DxgkDdiQueryAdapterInfo драйвер указывает член pOutputDataDXGKARG_QUERYADAPTERINFO на заполненные DXGK_QUERYSEGMENTOUT структуры (для версии драйвера, предшествующей модели драйвера windows Display Driver Model (WDDM) 1.2) или заполненные DXGK_QUERYSEGMENTOUT3 структуры (для драйвера WDDM 1.2 и более поздних версий).

В первом вызове член pSegmentDescriptorDXGK_QUERYSEGMENTOUT (для версии драйвера до WDDM 1.2) или DXGK_QUERYSEGMENTOUT3 (для драйвера WDDM 1.2 и более поздних версий) имеет значение NULL. Драйвер должен заполнить только элемент NbSegmentDXGK_QUERYSEGMENTOUT или DXGK_QUERYSEGMENTOUT3 количеством поддерживаемых типов сегментов. Это число также указывает количество незаселенных DXGK_SEGMENTDESCRIPTOR (для версии драйвера до WDDM 1.2) или DXGK_SEGMENTDESCRIPTOR3 (для драйвера WDDM 1.2 и более поздних версий), необходимых драйверу при втором вызове DxgkDdiQueryAdapterInfo.

Во втором вызове драйвер должен заполнить все элементы DXGK_QUERYSEGMENTOUT или DXGK_QUERYSEGMENTOUT3. Во втором вызове драйвер должен заполнить массив размером NbSegmentDXGK_SEGMENTDESCRIPTOR или DXGK_SEGMENTDESCRIPTOR3 структур в элементе pSegmentDescriptorDXGK_QUERYSEGMENTOUT или DXGK_QUERYSEGMENTOUT3 сведениями о сегментах, поддерживаемых драйвером.

В обоих вызовах DxgkDdiQueryAdapterInfo член pInputDataDXGKARG_QUERYADAPTERINFO указывает на DXGK_QUERYSEGMENTIN структуру, содержащую сведения о расположении и свойствах диафрагмы AGP. Если диафрагма AGP отсутствует или она присутствует, но не установлен соответствующий драйвер GART, сведения о диафрагме AGP устанавливаются в нулевое значение. Если диафрагма AGP отсутствует, драйвер мини-порта дисплея не должен указывать в массиве pSegmentDescriptorDXGK_QUERYSEGMENTOUT или DXGK_QUERYSEGMENTOUT3, что он поддерживает сегмент диафрагмы типа AGP. Если в таких случаях указан сегмент диафрагмы типа AGP, адаптер не сможет инициализироваться.

Во время инициализации, так как памяти достаточно, память для буфера подкачки может быть выделена из определенного сегмента. Диспетчер видеопамять выделяет память для буфера подкачки из сегмента, указанного в элементе PagingBufferSegmentIdDXGK_QUERYSEGMENTOUT или DXGK_QUERYSEGMENTOUT3. Драйвер указывает идентификатор сегмента буфера подкачки во втором вызове DxgkDdiQueryAdapterInfo. Драйвер также должен указать размер в байтах, который должен быть выделен для буфера подкачки в элементе PagingBufferSizeDXGK_QUERYSEGMENTOUT или DXGK_QUERYSEGMENTOUT3.

Дополнительные сведения об сегментах памяти и работе с буферами подкачки см. в разделе Обработка сегментов памяти и ресурсы видеопамять по страницам.