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。

BaseAddressBaseAddress+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。

BaseAddressBaseAddress+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)

另请参阅

pfnReserveGpuVirtualAddressCb

pfnUpdateGpuVirtualAddressCb