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

Структура DXGK_GPUMMUCAPS используется драйвером режима ядра для выражения возможностей адресации виртуальной памяти.

Синтаксис

typedef struct _DXGK_GPUMMUCAPS {
  union {
    struct {
      UINT ReadOnlyMemorySupported : 1;
      UINT NoExecuteMemorySupported : 1;
      UINT ZeroInPteSupported : 1;
      UINT ExplicitPageTableInvalidation : 1;
      UINT CacheCoherentMemorySupported : 1;
      UINT PageTableUpdateRequireAddressSpaceIdle : 1;
      UINT LargePageSupported : 1;
      UINT DualPteSupported : 1;
      UINT AllowNonAlignedLargePageAddress : 1;
      UINT SysMem64KBPageSupported : 1;
      UINT InvalidTlbEntriesNotCached : 1;
      UINT SysMemLargePageSupported : 1;
      UINT CachedPageTables : 1;
#if ...
      UINT Reserved : 19;
#elif
      UINT Reserved : 20;
#elif
      UINT Reserved : 21;
#elif
      UINT Reserved : 22;
#else
      UINT Reserved : 24;
#endif
    };
    UINT Value;
  };
  DXGK_PAGETABLEUPDATEMODE PageTableUpdateMode;
  UINT                     VirtualAddressBitCount;
  UINT                     LeafPageTableSizeFor64KPagesInBytes;
  UINT                     PageTableLevelCount;
  struct {
    UINT SourcePageTableVaInTransfer : 1;
    UINT Reserved : 31;
  } LegacyBehaviors;
} DXGK_GPUMMUCAPS;

Члены

ReadOnlyMemorySupported

Если задано значение 1, драйвер поддерживает защиту только для чтения на страницах памяти.

NoExecuteMemorySupported

Если задано значение 1, драйвер не поддерживает защиту от выполнения на страницах памяти.

ZeroInPteSupported

Если задано значение 1, GPU поддерживает флаг Нулевой DXGK_PTE . Это относится ко всем уровням таблицы страниц.

ExplicitPageTableInvalidation

Указывает, что все записи таблицы страниц или каталога страницы должны быть явно переведены в недопустимое состояние через UpdatePageTable перед освобождением. По умолчанию диспетчер видеопамяти может освободить таблицу страниц, содержащую ранее допустимые записи, если эти записи больше не нужны (например, освобождение большого диапазона виртуальных адресов GPU, что приводит к уничтожению базовых таблиц страниц).

Примечание

Эти флаги обычно используются программным драйвером, который должен эмулировать таблицу страниц и отслеживать сведения для каждой записи таблицы страницы и требует четкой пары init/deinit для всех обновлений записей таблицы страницы.

CacheCoherentMemorySupported

Указывает, что драйвер поддерживает биты CacheCoherent в записи таблицы страницы и может выполнять последовательную передачу операций ввода-вывода в системную память.

PageTableUpdateRequireAddressSpaceIdle

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

LargePageSupported

Если задано значение 1, все уровни таблиц страниц, кроме конечного, поддерживают большие страницы (бит LargePage в DXGK_PTE).

DualPteSupported

Если задано значение 1, GPU поддерживает два указателя на таблицы страниц в таблице страниц уровня 1 (таблица страниц 4 КБ и таблица страниц 64 КБ).

AllowNonAlignedLargePageAddress

Если задано значение 1, операционная система может установить флаг LargePage , если физический адрес записи большой страницы не соответствует охвату конечной страницы. Доступно начиная с Windows 10 версии 1607 (WDDM 2.1).

SysMem64KBPageSupported

Драйвер обеспечивает управление сегментами памяти в 64 КБ. Доступно начиная с Windows 10 версии 1607 (WDDM 2.1).

InvalidTlbEntriesNotCached

Если этот бит задан, драйвер не будет получать вызовы DxgkDdiBuildPagingBuffer для запросов FlushTlb для диапазонов va, которые переходят из недопустимого состояния в допустимое. Ожидается, что TLB оборудования не кэширует недопустимые преобразования.

Доступно начиная с Windows 10 версии 1903 (WDDM 2.6).

SysMemLargePageSupported

Драйвер обеспечивает поддержку больших страниц. Доступно начиная с Windows Server 2022 (WDDM 2.9).

CachedPageTables

Поддерживаются кэшированные таблицы страниц. Доступно начиная с WDDM 3.1.

Reserved

Зарезервировано для использования системой; не используйте.

Value

Значение структуры объединения, выраженное в виде целого числа.

PageTableUpdateMode

Определяет тип адресов, используемых в операциях DxgkDdiUpdatePageTable . Если задано DXGK_PAGETABLEUPDATE_GPU_VIRTUAL , все операции подкачки будут выполняться в виртуальном адресном пространстве системного контекста. Если каталоги страниц находятся в локальном сегменте памяти GPU, режим обновления не может быть установлен на DXGK_PAGETABLEUPDATE_CPU_VIRTUAL.

VirtualAddressBitCount

Число битов в виртуальном адресе GPU.

LeafPageTableSizeFor64KPagesInBytes

Размер таблицы конечных страниц при использовании страниц размером 64 КБ. Размер должен быть кратным размеру страницы ЦП (4096).

PageTableLevelCount

Количество поддерживаемых уровней таблицы страницы. Минимальное значение — 2 (определяется как DXGK_MIN_PAGE_TABLE_LEVEL_COUNT). Максимальное значение — DXGK_MAX_PAGE_TABLE_LEVEL_COUNT.

Если pageTableLevelCount равно 2, корневая таблица страниц динамически изменяется, а размер таблицы страниц определяется с помощью DxgkDdiGetRootPageTableSize. Если PageTableLevelCount больше 2, все уровни таблицы страниц имеют фиксированный размер, описываемый в DXGK_PAGE_TABLE_LEVEL_DESC::P ageTableSizeInBytes.

LegacyBehaviors

LegacyBehaviors.SourcePageTableVaInTransfer

Если задано значение 1, диспетчер видеопамяти задает адрес SourcePageTable в TransferVirtual во время вытеснения выделения.

LegacyBehaviors.Reserved

Защищены; не использовать.

Требования

Требование Значение
Минимальная версия клиента Windows 10
Минимальная версия сервера Windows Server 2016
Верхняя часть d3dkmddi.h (включая D3dkmddi.h)