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