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 フィールドは省略可能ですが、ADL を作成するには、そのオブジェクトを DXGKCB_OPENPHYSICALMEMORYOBJECT の呼び出しでアダプターに対して開く必要があります。 これは、ADL が論理メモリを表し、各論理アダプターに一意のドメインがあるためです。 メモリがどの物理アダプターに対して作成されるかは関係ありません。 物理アダプターが属する論理アダプターによって開き、リンクされているすべての物理アダプターにマップされます。
詳細については、IOMMU DMA の再マップ を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小サーバー | Windows Server 2022 (WDDM 2.9) |
ヘッダー | d3dkmddi.h |
関連項目
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT
mmAllocateContiguousMemorySpecifyCacheの