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
要求される物理メモリのサイズ (バイト単位)。 Type がDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACEの場合、Size はドライバーによって提供される IO 領域のサイズを参照します。
Context
デバッグのために Dxgkrnl が物理メモリ オブジェクトと共に格納するコンテキスト データのポインター サイズの部分。 この値は、 Dxgkrnl によって直接使用されたり逆参照されたりすることはありません。 この物理メモリ オブジェクトを所有するドライバー所有オブジェクトのメモリ アドレスなど、ドライバーが選択した任意の値を指定できます。
Type
作成する物理メモリの種類を指定するDXGK_PHYSICAL_MEMORY_TYPE値。 Type がDXGK_PHYSICAL_MEMORY_TYPE_SECTIONの場合、セクション オブジェクトの割り当て属性は常にSEC_COMMITされ (PF マップされたセクション)、キャッシュの種類は CacheType によって決定されます。
CacheType
ページのキャッシュの種類。 Type がDXGK_PHYSICAL_MEMORY_TYPE_SECTIONの場合は、CacheType をキャッシュするか、書き込み結合する必要があります。
Mdl
Type がDXGK_PHYSICAL_MEMORY_TYPE_MDLされている場合にのみ使用されます。
Mdl.LowAddress
Type がDXGK_PHYSICAL_MEMORY_TYPE_MDLされている場合にのみ使用されます。 詳細については、「 MmAllocatePagesForMdlEx 」を参照してください。
Mdl.HighAddress
Type がDXGK_PHYSICAL_MEMORY_TYPE_MDLされている場合にのみ使用されます。 詳細については、「 MmAllocatePagesForMdlEx 」を参照してください。
Mdl.SkipBytes
Type がDXGK_PHYSICAL_MEMORY_TYPE_MDLされている場合にのみ使用されます。 詳細については、「 MmAllocatePagesForMdlEx 」を参照してください。
Mdl.Flags
Type がDXGK_PHYSICAL_MEMORY_TYPE_MDLされている場合にのみ使用されます。 詳細については、「 MmAllocatePagesForMdlEx 」を参照してください。
ContiguousMemory
Type がDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYされている場合にのみ使用されます。
ContiguousMemory.LowestAcceptableAddress
Type がDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYされている場合にのみ使用されます。 詳細については、「 MmAllocateContiguousMemorySpecifyCache 」を参照してください。
ContiguousMemory.HighestAcceptableAddress
Type がDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYされている場合にのみ使用されます。 詳細については、「 MmAllocateContiguousMemorySpecifyCache 」を参照してください。
ContiguousMemory.BoundaryAddressMultiple
Type がDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYされている場合にのみ使用されます。 詳細については、「 MmAllocateContiguousMemorySpecifyCache 」を参照してください。
Section
Type がDXGK_PHYSICAL_MEMORY_TYPE_SECTIONされている場合にのみ使用されます。
Section.DesiredAccess
Type がDXGK_PHYSICAL_MEMORY_TYPE_SECTIONされている場合にのみ使用されます。 詳細については、「 ZwCreateSection 」を参照してください。
Section.ObjectAttributes
Type がDXGK_PHYSICAL_MEMORY_TYPE_SECTIONされている場合にのみ使用されます。 詳細については、「 ZwCreateSection 」を参照してください。
Section.PageProtection
Type がDXGK_PHYSICAL_MEMORY_TYPE_SECTIONされている場合にのみ使用されます。 この値は、PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE、またはPAGE_WRITECOPYのいずれかの値である必要があります。 このフィールドにはキャッシュ属性 (SEC_WRITECOMBINED など) を指定しないでください。 セクション オブジェクトの割り当てられた属性は常にSEC_COMMITされ (PF マップセクション)、キャッシュの種類は CacheType によって決定されます。 詳細については、「 ZwCreateSection 」を参照してください。
Section.AllocationAttributes
Type がDXGK_PHYSICAL_MEMORY_TYPE_SECTIONされている場合にのみ使用されます。 詳細については、「 ZwCreateSection 」を参照してください。
IOSpace
Type がDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACEされている場合にのみ使用されます。
IOSpace.BaseAddress
Type が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 フィールドは省略可能ですが、ADL を作成する前に、DXGKCB_OPENPHYSICALMEMORYOBJECTの呼び出しでアダプターに対してそのオブジェクトを開く必要があります。 これは、ADL が論理メモリを表し、各論理アダプターに一意のドメインがあるためです。 メモリがどの物理アダプターに対して作成されるかは関係ありません。 物理アダプターが属している論理アダプターによって開き、リンクされているすべての物理アダプターにマップされます。
詳細については、「 IOMMU DMA の再マップ 」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のサーバー | Windows Server 2022 (WDDM 2.9) |
Header | d3dkmddi.h |
こちらもご覧ください
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT