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 경우 크기는 드라이버에서 제공하는 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) |
머리글 | d3dkmddi.h |
추가 정보
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT