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


структура 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:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_CPU_VIRTUAL, виртуальный адрес ЦП находится в поле CpuVirtual. Если DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_GPU_VIRTUAL, виртуальный адрес GPU находится в поле GpuVirtual. Если DXGK_VIRTUALADDRESSCAPS:: PageTableUpdateModeDXGK_PAGETABLEUPDATE_GPU_PHYSICAL, физический адрес GPU находится в поле GpuPhysical.

pPageTableEntries

Записи, которые необходимо скопировать. Индекс нуля в массиве p 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 КБ. Индекс нуля в массиве p pPageTableEntries соответствует StartIndex в массиве записей таблицы страницы драйвера. Массив должен использоваться только в том случае, если задано ограничение DXGK_GPUMMUCAPS::D ualPteSupported.

FirstPteVirtualAddress

Виртуальный адрес GPU, сопоставленный первой обновленной записью таблицы страницы.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10
минимальный поддерживаемый сервер Windows Server 2016
заголовка d3dkmddi.h (include D3dkmddi.h)