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 托管的适配器内存对象。 适配器内存对象可以提供给其他记录的内存管理功能,以生成 ADL 进行 GPU 访问。 如果 hAdapter 为 NULL,此值将为 NULL,并且驱动程序必须调用 DXGKCB_OPENPHYSICALMEMORYOBJECT 才能创建此句柄。 可以通过调用 DXGKCB_CLOSEPHYSICALMEMORYOBJECT关闭此句柄,也可以提供给 DXGKCB_DESTROYPHYSICALMEMORYOBJECT ( ,但不能同时提供这两个) 。

备注

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

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

要求

   
最低受支持的服务器 Windows Server 2022 (WDDM 2.9)
Header d3dkmddi.h

另请参阅

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection