структура 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
Размер в байтах запрашиваемой физической памяти. Если типаDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE, размер ссылается на размер области пространства ввода-вывода, предоставленной драйвером.
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. Указывает начальный физический адрес области пространства ввода-вывода. Это значение должно быть выровнено по нескольким 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