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