структура 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, драйвер должен вызвать DXGKCB_OPENPHYSICALMEMORYOBJECT перед созданием списка дескрипторов адресов (ADL). Дополнительные сведения см. в разделе "Примечания".
Size
Размер запрашиваемой физической памяти (в байтах). Если type имеет значение DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE, размер означает размер области пространства ввода-вывода, предоставляемой драйвером.
Context
Элемент контекстных данных размера указателя, который Dxgkrnl будет хранить вместе с объектом физической памяти для отладки. Dxgkrnl никогда не использует это значение напрямую или разыменовывалось каким-либо образом. Это может быть любое значение по выбору драйвера, например адрес памяти для принадлежащего драйверу объекта, которому принадлежит этот объект физической памяти.
Type
Значение DXGK_PHYSICAL_MEMORY_TYPE , указывающее тип создаваемой физической памяти. Если тип — DXGK_PHYSICAL_MEMORY_TYPE_SECTION, атрибуты выделения объекта раздела всегда SEC_COMMIT (сопоставленный раздел PF), а тип кэша определяется типом CacheType.
CacheType
Тип кэша страниц. Если type имеет значение 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) в этом поле. Выделенные атрибуты объекта section всегда 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. Указывает начальный физический адрес области пространства ввода-вывода. Это значение должно быть выровнено с кратным PAGE_SIZE.
hPhysicalMemoryObject
При успешном вызове DXGKCB_CREATEPHYSICALMEMORYOBJECT это непрозрачный дескриптор обратно к объекту физической памяти, управляемому Dxgkrnl. Объект физической памяти можно предоставить другим документируемым функциям управления памятью для сопоставления виртуального адреса для доступа к ЦП. Этот дескриптор можно закрыть, вызвав DXGKCB_DESTROYPHYSICALMEMORYOBJECT.
hAdapterMemoryObject
При успешном вызове DXGKCB_CREATEPHYSICALMEMORYOBJECT это непрозрачный дескриптор обратно к объекту памяти адаптера, управляемого Dxgkrnl. Объект памяти адаптера можно предоставить другим документируемым функциям управления памятью, чтобы создать ADL для доступа к GPU. Если hAdapter имеет значение NULL, это значение будет иметь значение NULL и драйвер должен вызвать DXGKCB_OPENPHYSICALMEMORYOBJECT для создания этого дескриптора. Этот дескриптор можно закрыть путем вызова DXGKCB_CLOSEPHYSICALMEMORYOBJECT или предоставить DXGKCB_DESTROYPHYSICALMEMORYOBJECT (но не оба).
Комментарии
Поле hAdapter является необязательным при создании объекта физической памяти, но этот объект должен быть открыт для адаптера при вызове DXGKCB_OPENPHYSICALMEMORYOBJECT , прежде чем можно будет создать ADL. Это связано с тем, что ADL представляет логическую память, а каждый логический адаптер имеет уникальный домен. Не имеет значения, для какого физического адаптера создается память. Он будет открыт логическим адаптером, к которому принадлежит физический адаптер, и будет сопоставлен со всеми связанными физическими адаптерами.
Дополнительные сведения см. в статье Переназначение DMA IOMMU .
Требования
Требование | Значение |
---|---|
Минимальная версия сервера | Windows Server 2022 (WDDM 2.9) |
Верхняя часть | d3dkmddi.h |
См. также раздел
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT