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
指定要更新的 GPU 虚拟地址范围的 BaseAddress 。 该值以字节为单位,必须对齐 4KB。
从 BaseAddress 到 BaseAddress+SizeInBytes 的整个范围必须处于 保留 (零) 或 映射 状态,否则 pfnUpdateGpuVirtualAddressCb 操作将失败。 所有操作的虚拟地址范围必须属于同一 pfnReserveGpuVirtualAddressCb 调用保留的虚拟地址范围。
Map.SizeInBytes
指定要更新的范围的大小(以字节为单位)。 该值必须对齐 4KB。
Map.hAllocation
指定范围需要映射到的分配。
Map.AllocationOffsetInBytes
指定要映射的分配中第一页的偏移量(以字节为单位)。 该值必须对齐 4KB。
Map.AllocationSizeInBytes
指定要映射的分配范围的大小(以字节为单位)。 该值必须对齐 4KB,并且必须小于 Map.SizeInBytes。 如果此值为零,则使用 Map.SizeInBytes 。
当此值大于 Map.SizeInBytes 时, Map.SizeInBytes 必须是它的倍数。 在这种情况下 ,Map.SizeInBytes/Map.AllocationSizeInBytes 虚拟地址范围将映射到相同的分配范围。
MapProtect
将给定的虚拟地址范围映射到给定的分配范围。 分配不必在提交时或映射时驻留。 页面保护在 操作中指定。
MapProtect.BaseAddress
指定要更新的 GPU 虚拟地址范围的 BaseAddress 。 该值以字节为单位,必须对齐 4KB。
从 BaseAddress 到 BaseAddress+SizeInBytes 的整个范围必须处于 保留 (零) 或 映射 状态,否则 pfnUpdateGpuVirtualAddressCb 将失败。 所有操作的虚拟地址范围必须属于同一 pfnReserveGpuVirtualAddressCb 调用保留的虚拟地址范围。
MapProtect.SizeInBytes
指定要更新的范围的大小(以字节为单位)。 该值必须对齐 4KB。
MapProtect.hAllocation
指定范围需要映射到的分配。
MapProtect.AllocationOffsetInBytes
指定要映射的分配中第一页的偏移量(以字节为单位)。 该值必须对齐 4KB。
MapProtect.AllocationSizeInBytes
指定要映射的分配范围的大小(以字节为单位)。 该值必须对齐 4KB,并且必须小于 Map。SizeInBytes。 如果此值为零,则使用 Map.SizeInBytes 。
当此值小于 Map.SizeInBytes 时, Map.SizeInBytes 必须是它的倍数。 在这种情况下 ,Map.SizeInBytes/Map.AllocationSizeInBytes 虚拟地址范围将映射到相同的分配范围。
MapProtect.Protection
为页面指定 API 定义的保护。
MapProtect.DriverProtection
为页面指定特定于驱动程序的保护。
Unmap
将指定的虚拟地址范围置于 零 状态或 无效 状态。
Unmap.BaseAddress
指定要恢复为零状态的 GPU 虚拟地址范围的 BaseAddress。 该值以字节为单位,必须对齐 4KB。
Unmap.SizeInBytes
指定要释放的范围的大小(以字节为单位)。 该值必须对齐 4KB。
Unmap.Protection
定义 是取消映射后的页表条目状态,可以是 零 或 NoAccess。
Copy
复制操作将所有映射从源 GPU 虚拟地址范围复制到目标范围。 允许源范围和目标范围相交。 这两个范围都必须属于保留 (零) 虚拟地址范围。
BaseAddress
指定源虚拟地址范围的起始虚拟地址。 该值以字节为单位,必须对齐 4KB。
Copy.SourceAddress
Copy.SizeInBytes
指定要复制的范围的大小(以字节为单位)。 该值必须对齐 4KB。
Copy.DestAddress
指定目标虚拟地址范围的起始虚拟地址。 该值以字节为单位,必须对齐 4KB。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10 |
最低受支持的服务器 | Windows Server 2016 |
标头 | d3dukmdt.h (包括 D3dumddi.h、D3dkmddi.h) |