DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT结构(d3dkmddi.h)

DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT 结构包含 DXGKCB_CREATEPHYSICALMEMORYOBJECT 回调函数用于创建物理内存的信息。

语法

typedef struct _DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT {
  HANDLE                    hAdapter;
  SIZE_T                    Size;
  ULONG_PTR                 Context;
  DXGK_PHYSICAL_MEMORY_TYPE Type;
  DXGK_MEMORY_CACHING_TYPE  CacheType;
  union {
    struct {
      PHYSICAL_ADDRESS LowAddress;
      PHYSICAL_ADDRESS HighAddress;
      PHYSICAL_ADDRESS SkipBytes;
      UINT             Flags;
    } Mdl;
    struct {
      PHYSICAL_ADDRESS LowestAcceptableAddress;
      PHYSICAL_ADDRESS HighestAcceptableAddress;
      PHYSICAL_ADDRESS BoundaryAddressMultiple;
    } ContiguousMemory;
    struct {
      ACCESS_MASK        DesiredAccess;
      POBJECT_ATTRIBUTES ObjectAttributes;
      ULONG              PageProtection;
      ULONG              AllocationAttributes;
    } Section;
    struct {
      PHYSICAL_ADDRESS BaseAddress;
    } IOSpace;
  };
  HANDLE                    hPhysicalMemoryObject;
  HANDLE                    hAdapterMemoryObject;
} DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT;

成员

hAdapter

将为其关联此物理内存的适配器。 此参数是可选的,可以是 NULL。 如果为 NULL,驱动程序必须在创建地址描述符列表(ADL)之前调用 DXGKCB_OPENPHYSICALMEMORYOBJECT。 有关详细信息,请参阅“备注”。

Size

所请求的物理内存的大小(以字节为单位)。 如果 类型DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE大小 是指驱动程序提供的 IO 空间区域的大小。

Context

Dxgkrnl 的指针大小的上下文数据将与物理内存对象一起存储,以便进行调试。 此值绝不由 Dxgkrnl 直接使用或取消引用。 这可能是驱动程序选择的任何值,例如拥有此物理内存对象的驱动程序拥有对象的内存地址。

Type

指定要创建的物理内存类型的 DXGK_PHYSICAL_MEMORY_TYPE 值。 如果 类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION,则节对象的分配属性始终SEC_COMMIT(PF 映射节),缓存类型由 CacheType来确定。

CacheType

页面的缓存类型。 如果 DXGK_PHYSICAL_MEMORY_TYPE_SECTION类型,则 CacheType 必须缓存或组合写。

Mdl

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_MDL时使用。

Mdl.LowAddress

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_MDL时使用。 有关详细信息,请参阅 mmAllocatePagesForMdlEx

Mdl.HighAddress

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_MDL时使用。 有关详细信息,请参阅 mmAllocatePagesForMdlEx

Mdl.SkipBytes

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_MDL时使用。 有关详细信息,请参阅 mmAllocatePagesForMdlEx

Mdl.Flags

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_MDL时使用。 有关详细信息,请参阅 mmAllocatePagesForMdlEx

ContiguousMemory

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY时使用。

ContiguousMemory.LowestAcceptableAddress

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY时使用。 有关详细信息,请参阅 mmAllocateContiguousMemorySpecifyCache

ContiguousMemory.HighestAcceptableAddress

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY时使用。 有关详细信息,请参阅 mmAllocateContiguousMemorySpecifyCache

ContiguousMemory.BoundaryAddressMultiple

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY时使用。 有关详细信息,请参阅 mmAllocateContiguousMemorySpecifyCache

Section

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时使用。

Section.DesiredAccess

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时使用。 有关详细信息,请参阅 ZwCreateSection

Section.ObjectAttributes

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时使用。 有关详细信息,请参阅 ZwCreateSection

Section.PageProtection

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时使用。 此值应为以下值之一:PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE或PAGE_WRITECOPY。 请勿在此字段中指定缓存属性(例如SEC_WRITECOMBINED)。 节对象的分配属性始终SEC_COMMIT(PF 映射节),缓存类型由 CacheType确定。 有关详细信息,请参阅 ZwCreateSection

Section.AllocationAttributes

仅在 类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时使用。 有关详细信息,请参阅 ZwCreateSection

IOSpace

仅在 DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE类型 时使用。

IOSpace.BaseAddress

仅在 DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE类型 时使用。 指定 IO 空间区域的起始物理地址。 此值必须与PAGE_SIZE的倍数对齐。

hPhysicalMemoryObject

成功调用 DXGKCB_CREATEPHYSICALMEMORYOBJECT时,这是一个不透明的句柄,回到 Dxgkrnl托管的物理内存对象。 物理内存对象可以提供给其他记录的内存管理功能,以映射用于 CPU 访问的虚拟地址。 可以通过调用 DXGKCB_DESTROYPHYSICALMEMORYOBJECT来关闭此句柄。

hAdapterMemoryObject

成功调用 DXGKCB_CREATEPHYSICALMEMORYOBJECT时,这是一个不透明的句柄,回到 Dxgkrnl托管适配器内存对象。 可将适配器内存对象提供给其他记录的内存管理功能,以生成用于 GPU 访问的 ADL。 如果 hAdapter 为 NULL,则此值将为 NULL,并且驱动程序必须调用 DXGKCB_OPENPHYSICALMEMORYOBJECT 才能创建此句柄。 可以通过调用 DXGKCB_CLOSEPHYSICALMEMORYOBJECT来关闭此句柄,也可以提供给 DXGKCB_DESTROYPHYSICALMEMORYOBJECT(但不能同时提供)。

言论

创建物理内存对象时,hAdapter 字段是可选的,但必须在调用 DXGKCB_OPENPHYSICALMEMORYOBJECT 时针对适配器打开该对象,然后才能 创建ADL。 这是因为 ADL 表示逻辑内存,每个逻辑适配器都有一个唯一的域。 创建内存时所使用的物理适配器并不重要。 它将由物理适配器所属的逻辑适配器打开,并将映射到所有链接的物理适配器。

有关详细信息,请参阅 IOMMU DMA 重新映射

要求

要求 价值
支持的最低服务器 Windows Server 2022 (WDDM 2.9)
标头 d3dkmddi.h

另请参阅

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

mmAllocateContiguousMemorySpecifyCache

mmAllocatePagesForMdlEx

ZwCreateSection