次の方法で共有


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

関連項目

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

mmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection