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 |
另请参阅
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT