структура DXGK_ALLOCATIONINFO (d3dkmddi.h)
Структура DXGK_ALLOCATIONINFO описывает параметры для создания выделения.
Синтаксис
typedef struct _DXGK_ALLOCATIONINFO {
VOID *pPrivateDriverData;
UINT PrivateDriverDataSize;
union {
UINT Alignment;
struct {
UINT16 MinimumPageSize;
UINT16 RecommendedPageSize;
};
};
SIZE_T Size;
SIZE_T PitchAlignedSize;
DXGK_SEGMENTBANKPREFERENCE HintedBank;
DXGK_SEGMENTPREFERENCE PreferredSegment;
union {
UINT SupportedReadSegmentSet;
UINT MmuSet;
};
UINT SupportedWriteSegmentSet;
UINT EvictionSegmentSet;
union {
UINT MaximumRenamingListLength;
UINT PhysicalAdapterIndex;
};
HANDLE hAllocation;
union {
DXGK_ALLOCATIONINFOFLAGS Flags;
DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 FlagsWddm2;
};
DXGK_ALLOCATIONUSAGEHINT *pAllocationUsageHint;
UINT AllocationPriority;
DXGK_ALLOCATIONINFOFLAGS2 Flags2;
} DXGK_ALLOCATIONINFO;
Члены
pPrivateDriverData
[in] Указатель на блок частных данных. Эти данные являются для каждого выделения и отличаются от элемента pPrivateDriverData в структуре DXGKARG_CREATEALLOCATION. Драйвер отображения в пользовательском режиме (UMD) может передавать эти данные в драйвер мини-порта (KMD) в режиме ядра. Однако если Dxgkrnl передает эти данные для описания общей первичной или другой блокируемой поверхности, данные передаются в качестве первого элемента массива в pAllocationInfo члена DXGKARG_CREATEALLOCATION.
PrivateDriverDataSize
[in] Размер блока частных данных в pPrivateDriverData.
Alignment
[out] Необходимое выравнивание в байтах для выделения.
MinimumPageSize
RecommendedPageSize
Size
[out] Размер в байтах, необходимый для выделения. Значение размера расширяется до нескольких размеров собственной страницы узла (например, 4 КБ в архитектуре x86). KmD указывает размер выделения диспетчеру памяти видео (VidMm).
PitchAlignedSize
[out] Размер выделения в байтах при расположении в сегменте с выравниванием по шагу, который указывается флагом PitchAlignment битовое поле в Флаги член структуры DXGK_SEGMENTDESCRIPTOR для сегмента. Если выделение не поддерживается в сегменте с выравниванием по шагу (графические процессоры обычно не поддерживают этот тип сегмента), драйвер должен задать значение в PitchAlignedSize равным нулю. Если драйвер задает ненулевое значение в PitchAlignedSize, значение должно быть больше или равно значению в элементе Size.
HintedBank
[out] Структура DXGK_SEGMENTBANKPREFERENCE, указывающая параметры заказа банка KMD, которые VidMm использовать для выделения на странице. Если этот элемент указан, VidMm использует банковские сведения о наиболее предпочтительном сегменте, который указывается элементом SegmentId0 структуры DXGK_SEGMENTPREFERENCE, указанной элементом PreferredSegment.
PreferredSegment
[out] Структура DXGK_SEGMENTPREFERENCE, указывающая предпочтительные идентификаторы сегментов, запрашивающие KMD- запросы, которые VidMm использовать для выделения страниц.
SupportedReadSegmentSet
[out] Идентификаторы сегментов, которые KMD может задать в элементе PreferredSegment для операций чтения. Сегменты, указывающие на эти идентификаторы, являются сегментами, которые kmD-запросы VidMm используются для выделения страниц для операций чтения независимо от производительности. Параметр bit 0 указывает, что первый сегмент поддерживается, при установке бита 1 указывает, что второй сегмент поддерживается и т. д.
KMD может задавать настройки только для сегментов, которые поддерживаются для операций чтения. VidMm утверждает, пытается ли драйвер задать параметры неподдерживаемых сегментов в элементе PreferredSeg ment.
MmuSet
SupportedWriteSegmentSet
[out] Идентификаторы сегментов, которые KMD может задать в элементе PreferredSegment для операций записи. Сегменты, которые указывают эти идентификаторы, являются сегментами, которые kmD-запросы, которые VidMm использовать для выделения страниц для операций записи независимо от производительности. Параметр bit 0 указывает, что первый сегмент поддерживается, при установке бита 1 указывает, что второй сегмент поддерживается и т. д.
KMD может задавать настройки только для сегментов, которые поддерживаются для операций записи. VidMm утверждает, пытается ли драйвер задать параметры неподдерживаемых сегментов в элементе PreferredSeg ment.
EvictionSegmentSet
[out] Идентификаторы сегментов, которые можно использовать для вытеснения. Параметр bit 0 указывает, что первый сегмент можно использовать для вытеснения, при установке бита 1 указывает, что второй сегмент можно использовать для вытеснения и т. д.
Этот элемент может указывать только сегменты диафрагмы. Если драйвер указывает допустимые сегменты, используемые для вытеснения, VidMm пытается выделить ресурсы в этих сегментах диафрагма, чтобы ускорить процесс вытеснения. Если драйвер задает значение 0, VidMm вызывает драйвер для передачи содержимого выделения непосредственно в заблокированную на страницу системную память без сопоставления базовых страниц с помощью сегмента диафрагмы.
MaximumRenamingListLength
[out] Максимальная длина списка переименования для выделения. Дополнительные сведения о списке переименований см. в разделе Запрос на переименованиевыделения.
Поддержка этого члена началась с Windows 10 и WDDM версии 2.
PhysicalAdapterIndex
[out] Индекс физического адаптера.
Поддержка этого члена началась с Windows 10 и WDDM версии 2.
hAllocation
[out] Дескриптор выделения. KMD должен задать этому элементу значение, которое он может использовать для ссылки на свою структуру частного отслеживания для выделения.
Flags
[out] Структура DXGK_ALLOCATIONINFOFLAGS, которая определяет свойства выделения в флагах битового поля. Эти свойства указывают тип создаваемого выделения. KmD указывает эти флаги для VidMm. Драйверы, предназначенные для любой версии WDDM ранее WDDM 2.0, должны использовать флаги; Драйверы, предназначенные для любой версии WDDM >= WDDM 2.0, должны использовать FlagsWddm2.
FlagsWddm2
[out] Структура DXGK_ALLOCATIONINFOFLAGS_WDDM2_0, которая определяет свойства выделения в флагах битового поля. Эти свойства указывают тип создаваемого выделения. KmD указывает эти флаги для VidMm. Драйверы, предназначенные для любой версии WDDM >= WDDM 2.0, должны использовать FlagsWddm2; Драйверы, предназначенные для любой версии WDDM ранее WDDM 2.0, должны использовать флаги.
pAllocationUsageHint
[out] Указатель на DXGK_ALLOCATIONUSAGEHINT структуру, используемую диспетчером памяти для определения способа использования выделения.
AllocationPriority
[out] Значение UINT, указывающее начальный уровень приоритета выделения.
Драйвер определяет соответствующий уровень приоритета для каждого выделения. Дополнительные сведения о уровнях приоритета см. в разделе "Примечания" функции pfnSetPriorityCb. Если уровень приоритета для выделения не является проблемой для драйвера, драйвер должен задать для всех уровней приоритета D3DDDI_ALLOCATIONPRIORITY_NORMAL. Обратите внимание, что 0 является недопустимым начальным приоритетом выделения.
Flags2
[out] Структура DXGK_ALLOCATIONINFOFLAGS2, содержащая дополнительные свойства для выделения. Поддерживается начиная с Windows 11 (WDDM 3.0).
Замечания
При использовании WDDM версии 2 структура DXGK_ALLOCATIONINFO была изменена таким образом, чтобы набор сегментов чтения и записи больше не отличался. Во время создания поверхности VidMm игнорирует значение SupportedReadSegmentSet и использует только набор сегментов, предоставляемый SupportedWriteSegmentSet. Драйверы должны убедиться, что это значение точно представляет набор сегментов, который может использоваться выделением для его целевой цели.
Игнорировать поддерживаемый набор сегментов чтения не означает, что он больше не поддерживается, но просто не должно быть разницы между этими наборами, и VidMm будет разрешено выбрать соответствующий сегмент для любого выделения из одного набора сегментов.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows Vista |
заголовка | d3dkmddi.h (include D3dkmddi.h) |