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


структура DXGK_SEGMENTDESCRIPTOR3 (d3dkmddi.h)

Структура DXGK_SEGMENTDESCRIPTOR3 содержит сведения о поддерживаемом драйвером сегменте, состоящем из памяти, зарезервированной BIOS (которая очищается при переходе в состояние с низким энергопотреблением) и памяти, зарезервированной драйвером.

Синтаксис

typedef struct _DXGK_SEGMENTDESCRIPTOR3 {
  [out] DXGK_SEGMENTFLAGS Flags;
  [out] PHYSICAL_ADDRESS  BaseAddress;
  [out] PHYSICAL_ADDRESS  CpuTranslatedAddress;
  [out] SIZE_T            Size;
  [out] UINT              NbOfBanks;
  [out] SIZE_T            *pBankRangeTable;
  [out] SIZE_T            CommitLimit;
        SIZE_T            SystemMemoryEndAddress;
        SIZE_T            Reserved;
} DXGK_SEGMENTDESCRIPTOR3;

Члены

[out] Flags

Структура DXGK_SEGMENTFLAGS, определяющая свойства (в флагах битовых полей) для сегмента.

Обратите внимание, что для сегмента диафрагмы типа AGP драйвер должен устанавливать исключительно элемент Agp структуры в объединении, которое содержит DXGK_SEGMENTFLAGS. Хотя сегмент диафрагмы типа AGP является диафрагмой и доступен ЦП, если заданы другие члены, адаптер не сможет инициализироваться.

[out] BaseAddress

Базовый адрес сегмента, определяемый графическим процессором (GPU). Физический адрес выделения, который диспетчер видеопамять, выстраивается в сегменте, назначается адрес GPU, который смещается от базового адреса, указанного BaseAddress .

Диспетчер видеопамяли игнорирует базовый адрес сегментов диафрагмы типа AGP (где флаг битового поля AGP указан в элементе Flags ) и вместо этого использует фактический физический адрес сегмента в апертуре AGP, как определено в шине, где находится GPU. В этом случае драйвер может использовать адреса, созданные диспетчером видеопамяли для выделения напрямую, не требуя перевода.

[out] CpuTranslatedAddress

Базовый адрес сегмента относительно шины, в которую подключен GPU. Например, если GPU подключен к шине PCI, CpuTranslatedAddress — это базовый адрес диапазона, который задается регистром базовых адресов (BAR) PCI. Драйвер указывает этот адрес, только если он указывает сегмент, доступный ЦП, устанавливая флаг битового поля CpuVisible в элементе Flags .

Этот элемент игнорируется для сегментов диафрагмы, включая сегмент диафрагмы типа AGP. Единственное исключение возникает, если драйвер отображения пользовательского режима не настроил альтернативный виртуальный адрес для основного выделения (то есть если драйвер не задал UseAlternateVA в элементе Flags структуры D3DDDICB_LOCKFLAGS во время вызова функции pfnLockCb ).

Прежде чем диспетчер видеопамяти сопоставляет виртуальный адрес с физическим диапазоном, диспетчер видеопамяти преобразует этот физический адрес на основе представления ЦП шины и сообщает драйверу об операции, чтобы драйвер смог настроить диафрагму для доступа к содержимому сегмента в указанном расположении.

[out] Size

Размер сегмента (в байтах). Этот размер должен быть кратным размеру собственной главной страницы (например, 4 КБ в архитектуре x86).

Для сегментов диафрагмы типа AGP (где флаг битового поля AGP указан в элементе Flags ) диспетчер видеопамяли выделяет как можно больше диафрагмы, поэтому этот элемент игнорируется.

[out] NbOfBanks

Количество банков в сегменте, если используется банковское обслуживание (то есть, если флаг битового поля UseBanking установлен в элементе Flags ).

[out] pBankRangeTable

Массив значений, указывающий диапазоны, разделяющие каждый банк в сегменте. Драйвер указывает этот массив только в том случае, если он также задает флаг битового поля UseBanking в элементе Flags .

Массив указывает конечные адреса первого банка через банк NbOfBanks(то есть конечные смещения в сегменте для каждого банка). Следует отметить следующее.

  • Банки являются непрерывными.

  • Первый банк начинается с нуля смещения сегмента.

  • Последний банк заканчивается в конце сегмента, поэтому драйвер не обязан указывать конечный адрес последнего банка.

[out] CommitLimit

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

SystemMemoryEndAddress

Для сегментов, частично состоящих из системной памяти, все выделения, начинающиеся после этого адреса, удаляются при переходе в состояние гибернации. Выделения, полностью существующие в системной памяти, где адрес сегмента меньше или равен SystemMemoryEndAddress, не удаляются при этом переходе.

Драйвер мини-порта отображения должен задать для этого элемента значение, отличное от NULL , если сегмент частично сохраняется при переходе в состояние гибернации. В этом случае следует задать элемент PartiallyPreservedDuringHibernate в структуре DXGK_SEGMENTFLAGS .

Память, зарезервированная драйвером, выполняется от адреса сегмента 0 до SystemMemoryEndAddress включительно. Память, зарезервированная BIOS, выполняется от (SystemMemoryEndAddress+1) до конца сегмента.

Reserved

Этот элемент зарезервирован и должен иметь нулевое значение.

Комментарии

Эта структура используется драйверами мини-портов режима ядра WDDM 1.2 или более поздней версии для возврата сведений об сегментах памяти в ответ на вызов функции DxgkDdiQueryAdapterInfo , в котором графическая подсистема задает значение DXGKQAITYPE_QUERYSEGMENT3 в элементе Type структуры DXGKARG_QUERYADAPTERINFO .

На эту структуру указывает элемент pSegmentDescriptorструктуры DXGK_QUERYSEGMENTOUT3 .

Требования

Требование Значение
Минимальная версия клиента Windows 8
Минимальная версия сервера Windows Server 2012
Верхняя часть d3dkmddi.h

См. также раздел

D3DDDICB_LOCKFLAGS

DXGKARG_QUERYADAPTERINFO

DXGK_QUERYSEGMENTOUT3

DXGK_SEGMENTFLAGS

DxgkDdiQueryAdapterInfo