структура 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) |