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


структура D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION (d3dukmdt.h)

D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION описывает операцию обновления виртуального адреса.

Синтаксис

typedef struct _D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION {
  D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION_TYPE OperationType;
  union {
    struct {
      D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS BaseAddress;
      D3DKMT_ALIGN64 D3DGPU_SIZE_T          SizeInBytes;
      D3DKMT_HANDLE                         hAllocation;
      D3DKMT_ALIGN64 D3DGPU_SIZE_T          AllocationOffsetInBytes;
      D3DKMT_ALIGN64 D3DGPU_SIZE_T          AllocationSizeInBytes;
    } Map;
    struct {
      D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS   BaseAddress;
      D3DKMT_ALIGN64 D3DGPU_SIZE_T            SizeInBytes;
      D3DKMT_HANDLE                           hAllocation;
      D3DKMT_ALIGN64 D3DGPU_SIZE_T            AllocationOffsetInBytes;
      D3DKMT_ALIGN64 D3DGPU_SIZE_T            AllocationSizeInBytes;
      D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE Protection;
      D3DKMT_ALIGN64 UINT64                   DriverProtection;
    } MapProtect;
    struct {
      D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS   BaseAddress;
      D3DKMT_ALIGN64 D3DGPU_SIZE_T            SizeInBytes;
      D3DDDIGPUVIRTUALADDRESS_PROTECTION_TYPE Protection;
    } Unmap;
    struct {
      D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS SourceAddress;
      D3DKMT_ALIGN64 D3DGPU_SIZE_T          SizeInBytes;
      D3DKMT_ALIGN64 D3DGPU_VIRTUAL_ADDRESS DestAddress;
    } Copy;
  };
} D3DDDI_UPDATEGPUVIRTUALADDRESS_OPERATION;

Члены

OperationType

Map

Сопоставляет заданный диапазон виртуальных адресов с заданным диапазоном выделения. Выделение не обязательно должно быть резидентом во время отправки или во время сопоставления. Для страниц задается защита от чтения и записи. DriverProtection для страниц имеет нулевое значение.

Map.BaseAddress

Указывает BaseAddress диапазона виртуальных адресов GPU для обновления. Значение в байтах и должно быть выровнено по 4 КБ.

Весь диапазон от BaseAddress до BaseAddress+SizeInBytes должен находиться в зарезервированном (нулевом) или сопоставленном состоянии, иначе операция pfnUpdateGpuVirtualAddressCb завершится ошибкой. Диапазоны виртуальных адресов для всех операций должны принадлежать диапазону виртуальных адресов, который зарезервирован тем же вызовом pfnReserveGpuVirtualAddressCb .

Map.SizeInBytes

Задает размер обновляемого диапазона в байтах. Значение должно быть выровнено по 4 КБ.

Map.hAllocation

Указывает выделение, с чем должен быть сопоставлен диапазон.

Map.AllocationOffsetInBytes

Указывает смещение (в байтах) к первой странице выделения для сопоставления. Значение должно быть выровнено по 4 КБ.

Map.AllocationSizeInBytes

Задает размер диапазона выделения для сопоставления в байтах. Значение должно быть выровнено по 4 КБ и меньше Map.SizeInBytes. Если это значение равно нулю, используется Map.SizeInBytes .

Если это значение превышает Значение Map.SizeInBytes, Map.SizeInBytes должно быть кратным. В этом случае диапазоны виртуальных адресов Map.SizeInBytes/Map.AllocationSizeInBytes будут сопоставлены с тем же диапазоном выделения.

MapProtect

Сопоставляет заданный диапазон виртуальных адресов с заданным диапазоном выделения. Выделение не обязательно должно быть резидентом во время отправки или во время сопоставления. Защита страницы указывается в операции .

MapProtect.BaseAddress

Указывает BaseAddress диапазона виртуальных адресов GPU для обновления. Значение в байтах и должно быть выровнено по 4 КБ.

Весь диапазон от BaseAddress до BaseAddress+SizeInBytes должен находиться в зарезервированном (нулевом) или сопоставленном состоянии, в противном случае произойдет сбой pfnUpdateGpuVirtualAddressCb . Диапазоны виртуальных адресов для всех операций должны принадлежать диапазону виртуальных адресов, который зарезервирован тем же вызовом pfnReserveGpuVirtualAddressCb .

MapProtect.SizeInBytes

Задает размер обновляемого диапазона в байтах. Значение должно быть выровнено по 4 КБ.

MapProtect.hAllocation

Указывает выделение, с чем должен быть сопоставлен диапазон.

MapProtect.AllocationOffsetInBytes

Указывает смещение (в байтах) к первой странице выделения для сопоставления. Значение должно быть выровнено по 4 КБ.

MapProtect.AllocationSizeInBytes

Задает размер диапазона выделения для сопоставления в байтах. Значение должно быть выровнено по 4 КБ и меньше, чем Значение Map. SizeInBytes. Если это значение равно нулю, используется Map.SizeInBytes .

Если это значение меньше Map.SizeInBytes, Map.SizeInBytes должен быть кратным. В этом случае диапазоны виртуальных адресов Map.SizeInBytes/Map.AllocationSizeInBytes будут сопоставлены с тем же диапазоном выделения.

MapProtect.Protection

Задает защиту, определяемую API, для страниц.

MapProtect.DriverProtection

Задает защиту страниц для конкретного драйвера.

Unmap

Переводит указанный диапазон виртуальных адресов в нулевое состояние или в недопустимое состояние.

Unmap.BaseAddress

Указывает BaseAddress диапазона виртуальных адресов GPU, который необходимо вернуть в нулевое состояние. Значение в байтах и должно быть выровнено по 4 КБ.

Unmap.SizeInBytes

Указывает размер освобождаемого диапазона в байтах. Значение должно быть выровнено по 4 КБ.

Unmap.Protection

Определяет состояние записи таблицы страницы после отмены сопоставления ( Zero или NoAccess).

Copy

Операция копирования копирует все сопоставления из исходного диапазона виртуальных адресов GPU в диапазон назначения. Исходный и целевой диапазоны могут пересекаться. Оба диапазона должны принадлежать зарезервированным (нулевому) диапазону виртуальных адресов.

BaseAddress

Указывает начальный виртуальный адрес исходного диапазона виртуальных адресов. Значение в байтах и должно быть выровнено по 4 КБ.

Copy.SourceAddress

Copy.SizeInBytes

Указывает размер копируемого диапазона в байтах. Значение должно быть выровнено по 4 КБ.

Copy.DestAddress

Указывает начальный виртуальный адрес целевого диапазона виртуальных адресов. Значение в байтах и должно быть выровнено по 4 КБ.

Требования

Требование Значение
Минимальная версия клиента Windows 10
Минимальная версия сервера Windows Server 2016
Верхняя часть d3dukmdt.h (включая D3dumddi.h, D3dkmddi.h)

См. также раздел

pfnReserveGpuVirtualAddressCb

pfnUpdateGpuVirtualAddressCb