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.SizeInBytesMap.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.SizeInBytesMap.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