структура DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE (d3dkmddi.h)
DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE используется как часть операции обновления таблицы страниц.
Синтаксис
typedef struct _DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE {
UINT PageTableLevel;
HANDLE hAllocation;
DXGK_PAGETABLEUPDATEADDRESS PageTableAddress;
DXGK_PTE *pPageTableEntries;
UINT StartIndex;
UINT NumPageTableEntries;
UINT Reserved0;
DXGK_UPDATEPAGETABLEFLAGS Flags;
UINT64 DriverProtection;
UINT64 AllocationOffsetInBytes;
HANDLE hProcess;
DXGK_PAGETABLEUPDATEMODE UpdateMode;
DXGK_PTE *pPageTableEntries64KB;
D3DGPU_VIRTUAL_ADDRESS FirstPteVirtualAddress;
} DXGK_BUILDPAGINGBUFFER_UPDATEPAGETABLE;
Члены
PageTableLevel
Уровень таблицы страниц, которая обновляется.
hAllocation
Дескриптор драйвера режима ядра для выделения, который сопоставляется записями таблицы страниц. Дескриптор возвращается драйвером режима ядра из DxgkDdiCreateAllocation. Дескриптор может иметь значение NULL для выделений, которые не имеют дескриптора драйвера режима ядра (таблицы страниц, каталоги страниц и т. д.).
PageTableAddress
Адрес обновляемой таблицы страницы. Если DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeимеет значение DXGK_PAGETABLEUPDATE_CPU_VIRTUAL, виртуальный адрес ЦП находится в поле CpuVirtual . Если DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_GPU_VIRTUAL, виртуальный адрес GPU находится в поле GpuVirtual . Если DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeимеет значение DXGK_PAGETABLEUPDATE_GPU_PHYSICAL, физический адрес GPU находится в поле GpuPhysical .
pPageTableEntries
Записи, которые необходимо скопировать. Нулевой индекс в массиве pPageTableEntries соответствует значению StartIndex в массиве входных данных таблицы страницы драйвера.
StartIndex
Начальный индекс записи таблицы страницы в таблице страницы, в которой должны быть скопированы записи. Индекс массива входных данных таблицы страниц отсчитывается от нуля.
NumPageTableEntries
Количество записей, которые необходимо скопировать.
Reserved0
Этот элемент зарезервирован и должен иметь нулевое значение.
Flags
DXGK_UPDATEPAGETABLEFLAGS структуры, описывающей операцию обновления.
DriverProtection
Передается UMD в MapGpuVirtualAddressRangeCb.
AllocationOffsetInBytes
Если значение hAllocation не равно NULL, это поле указывает относительное смещение (в байтах) от начала выделения до первой страницы, целевой для этой операции обновления. Если обновление предназначено для нескольких страниц из hAllocation, эти страницы гарантированно будут последовательными. Например, диспетчер видеопамяти может обновлять виртуальный адрес GPU до страницы 4,5,6,7 в hAllocation. Никогда не будет случаев, когда драйвер увидит одну операцию обновления, предназначенную для непоследовательных страниц (например, 4,5,7). Обратите внимание, что хотя страницы гарантированно будут последовательными с точки зрения выделения, они могут не быть физически непрерывными в памяти.
hProcess
Обработчик процесса драйвера режима ядра для процесса, записи таблицы страниц которого обновляются. Это значение, возвращаемое из DxgkDdiCreateProcess.
UpdateMode
Определяет значение PageTableAddress. При инициализации таблиц страниц для процесса разбиения на страницы режим обновления всегда DXGK_PAGETABLEUPDATE_CPU_VIRTUAL а pDmaBuffer имеет значение NULL. В этом случае драйвер должен немедленно обновить таблицы страниц. В других случаях updateMode имеет значение , указанное в DXGK_VIRTUALADDRESSCAPS::GpuMmu.PageTableUpdateMode.
При обновлении записей таблицы страницы для конечной страницы диспетчер видеопамя предполагает, что каждая запись охватывает страницу размером 4 КБ. Если страница GPU больше (4 КБ * 2n), диспетчер видеопамяти предоставит записи в массиве, которые указывают на страницах GPU. Драйверу режима ядра может потребоваться только инициализировать записи таблицы страниц, которые указывают на начало страниц GPU. На следующем рисунке это показано в случае, когда страница GPU имеет размер 16 КБ.
pPageTableEntries64KB
Записи, которые необходимо скопировать из таблиц страниц размером 64 КБ. Нулевой индекс в массиве pPageTableEntries соответствует значению StartIndex в массиве входных данных таблицы страницы драйвера. Массив следует использовать, только если задано ограничение DXGK_GPUMMUCAPS::D ualPteSupported .
FirstPteVirtualAddress
Виртуальный адрес GPU, сопоставленный первой обновленной записью таблицы страницы.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 10 |
Минимальная версия сервера | Windows Server 2016 |
Верхняя часть | d3dkmddi.h (включая D3dkmddi.h) |