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


структура 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 поддерживает два указателя на таблицы страниц на уровне одной страницы (4 КБ таблицы страницы и 64 КБ страницы).

AllowNonAlignedLargePageAddress

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

SysMem64KBPageSupported

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

InvalidTlbEntriesNotCached

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

Доступно начиная с 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 (include D3dkmddi.h)