структура DXGK_ALLOCATIONINFOFLAGS (d3dkmddi.h)
Структура DXGK_ALLOCATIONINFOFLAGS определяет свойства выделения.
Синтаксис
typedef struct _DXGK_ALLOCATIONINFOFLAGS {
union {
struct {
UINT CpuVisible : 1;
UINT PermanentSysMem : 1;
UINT Cached : 1;
UINT Protected : 1;
UINT ExistingSysMem : 1;
UINT ExistingKernelSysMem : 1;
UINT FromEndOfSegment : 1;
UINT Swizzled : 1;
UINT Overlay : 1;
UINT Capture : 1;
UINT UseAlternateVA : 1;
UINT SynchronousPaging : 1;
UINT LinkMirrored : 1;
UINT LinkInstanced : 1;
UINT HistoryBuffer : 1;
UINT AccessedPhysically : 1;
UINT ExplicitResidencyNotification : 1;
UINT HardwareProtected : 1;
UINT CpuVisibleOnDemand : 1;
UINT Reserved : 4;
UINT DXGK_ALLOC_RESERVED16 : 1;
UINT DXGK_ALLOC_RESERVED15 : 1;
UINT DXGK_ALLOC_RESERVED14 : 1;
UINT DXGK_ALLOC_RESERVED13 : 1;
UINT DXGK_ALLOC_RESERVED12 : 1;
UINT DXGK_ALLOC_RESERVED11 : 1;
UINT DXGK_ALLOC_RESERVED10 : 1;
UINT DXGK_ALLOC_RESERVED9 : 1;
UINT DXGK_ALLOC_RESERVED4 : 1;
UINT DXGK_ALLOC_RESERVED3 : 1;
UINT DXGK_ALLOC_RESERVED2 : 1;
UINT DXGK_ALLOC_RESERVED1 : 1;
UINT DXGK_ALLOC_RESERVED0 : 1;
};
UINT Value;
};
} DXGK_ALLOCATIONINFOFLAGS;
Члены
CpuVisible
[out] Значение UINT, указывающее, доступно ли выделение непосредственно ЦП. Драйвер мини-порта дисплея должен задать этот флаг для драйвера отображения в пользовательском режиме, чтобы успешно вызвать функцию pfnLockCb для выделения. Если этот флаг не задан для выделения, pfnLockCb возвращает ошибку.
Обратите внимание, что только процесс, создавший общее выделение, может заблокировать это выделение.
Установка этого элемента эквивалентна настройке первого бита 32-разрядного значения значения (0x00000001).
PermanentSysMem
[out] Значение UINT, указывающее, должна ли копия выделения храниться в системной памяти, даже если содержимое находится в сегменте памяти. По умолчанию хранилище резервной памяти поверхностной системы теряется при передаче выделения в сегмент памяти. Если указан флаг PermanentSysMem и выделение вытеснимо из сегмента памяти, содержимое выделения удаляется и не выгружается, если выделение не грязно (то есть выделение не было целью операции записи, так как она была разброшена).
Вызов pfnLockCb выделения всегда возвращает хранилище резервной памяти системы для выделения. Если выделение находится в сегменте памяти, когда драйвер отображения пользовательского режима вызывает pfnUnlockCb, ресурс сегмента памяти для выделения обновляется с новым содержимым. Это обновление отображается в драйвере мини-порта отображения в качестве регулярной операции разбиения по страницам через функцию DxgkDdiBuildPagingBuffer. Обратите внимание, что если для драйвера мини-порта отображения требуется минимальный размер региона или выравнивание для операции разбиения на страницы, это требование должно отражаться в заблокированном регионе. Если драйвер задает PermanentSysMem, драйвер также должен задать элемент CpuVisible. Драйвер не должен задавать PermanentSysMem на первичной поверхности.
Установка этого элемента эквивалентна настройке второго бита 32-разрядного элемента значения (0x00000002).
Cached
[out] Значение UINT, указывающее, следует ли выделять резервное хранилище выделения как кэшированную память; По умолчанию хранилище резервной копии выделения хранится в виде объединенной памяти записи. Если выделение кэшированных памяти используется в сегменте, который не является последовательным (например, сегмент памяти или сегмент AGP), диспетчер памяти видео обеспечивает согласованность содержимого выделения путем очистки его от кэша процессора в соответствующее время.
Если драйвер задает кэшированные, а также задает ExistingSysMem или existingKernelSySysMem член, драйвер указывает диспетчеру памяти видео, что существующую память сопоставлена с кэшируемой. Если существующая память была сопоставлена с кэшируемой, но драйвер не может задать элемент кэшированных, диспетчер памяти видео не может обеспечить совместность данных и повреждение. Драйвер должен задать элемент кэшированного для выделения, который должен читаться приложением или драйвером отображения в пользовательском режиме. Драйвер никогда не должен задавать элемент кэшированного для выделения только для записи.
Если драйвер задает этот элемент, драйвер также должен задать элемент CpuVisible. Драйвер не должен задавать кэшированные на первичной поверхности.
Установка этого элемента эквивалентна настройке третьего бита 32-разрядного элемента значения (0x00000004).
Protected
[out] Значение UINT, указывающее, следует ли выделять резервное хранилище выделения в памяти ядра вместо адресного пространства пользователя, чтобы защитить выделение от потенциального прямого доступа К ЦП приложением. Драйвер не может задать этот элемент в сочетании с PermanentSysMem, ExistingSysMemили existingKernelSysMem. Драйвер не должен задавать защищенные на первичной поверхности.
Установка этого элемента эквивалентна настройке четвертого бита 32-разрядного элемента значения (0x00000008).
ExistingSysMem
[out] Значение UINT, указывающее, должен ли диспетчер памяти видео использовать существующий диапазон системной памяти в качестве резервного хранилища для выделения. Диапазон памяти системы должен быть допустимым адресом пользовательского режима для текущего процесса для размера выделения. Диапазон памяти системы также должен быть выровнен и должен быть страницей с несколькими размерами.
Если диапазон памяти системы является кэшируемым виртуальным адресом, драйвер должен задать элемент Кэшированный, чтобы сообщить диспетчеру памяти видео, чтобы обеспечить совместность кэша с выделением. Если элемент кэшированного не указан, диспетчер памяти видео определяет, что диапазон памяти системы недоступен, записывается в сочетании или кэше; Однако в этой ситуации драйвер либо гарантирует совместность кэша, либо определяет, что совместное использование кэша не является проблемой для указанного использования.
Обратите внимание, что этот тип выделения неявно имеет ту же семантику блокировки, что и выделение, в котором задан элемент PermanentSysMem.
Драйвер не может задать ExistingSysMem в сочетании с PermanentSysMem, Protectedили ExistingKernelSysMem. Драйвер не должен задавать ExistingSysMem на первичной поверхности.
Установка этого элемента эквивалентна настройке пятого бита 32-разрядного элемента значения (0x00000010).
ExistingKernelSysMem
[out] Значение UINT, указывающее, должен ли диспетчер памяти видео использовать существующий диапазон системной памяти в качестве резервного хранилища для выделения. Диапазон системной памяти должен быть допустимым адресом в режиме ядра, выровненным на странице и несколькими размерами страницы.
Если диапазон памяти системы является кэшируемым виртуальным адресом, драйвер должен задать элемент Кэшированный, чтобы сообщить диспетчеру памяти видео, чтобы обеспечить совместность кэша с выделением. Если элемент кэшированного не указан, диспетчер памяти видео определяет, что диапазон памяти системы недоступен, записывается в сочетании или кэше; Однако в этой ситуации драйвер либо гарантирует совместность кэша, либо определяет, что совместное использование кэша не является проблемой для указанного использования.
Обратите внимание, что этот тип выделения неявно имеет ту же семантику блокировки, что и выделение, в котором задан элемент PermanentSysMem.
Драйвер не может задать ExistingKernelSysMem в сочетании с элементом PermanentSysMem, Protectedили ExistingSysMem. Драйвер не должен задавать ExistingKernelSysMem на первичной поверхности.
Установка этого элемента эквивалентна настройке шестого бита 32-разрядного элемента значения (0x00000020).
FromEndOfSegment
[out] Значение UINT, указывающее, следует ли выделить выделение из конца сегмента во время разбиения по страницам. Диспетчер памяти видео сканирует адресное пространство сегмента и ищет место для выделения из конца сегмента вместо сканирования с начала сегмента (это поведение по умолчанию). Однако намеченная и предпочтительная информация сегмента принимает прецедент по этому флагу.
Установка этого элемента эквивалентна настройке седьмого бита 32-разрядного элемента value (0x00000040).
Swizzled
[out] Значение UINT, указывающее, является ли выделение перевораченным и требуется специальная поддержка диспетчером памяти видео для блокировки выделения. Дополнительные сведения о ветвяющих выделениях см. в разделе Блокировкавыделения Swizzled.
Установка этого элемента эквивалентна настройке восьмого бита 32-разрядного элемента значения (0x00000080).
Overlay
[out] Значение UINT, указывающее, является ли выделение для операции наложения. Выделения наложения закреплены в памяти, и диспетчер памяти видео не может вытеснить их, если процесс обнаружения и восстановления времени ожидания (TDR) не останавливается, подключаемый модуль и воспроизведение (PnP) или уровень три синхронизации. Обратите внимание, что до выполнения трех уровней синхронизации обычно уничтожаются наложения. По умолчанию выделение наложений ограничено и не может занимать больше, чем последние 20 процентов сегмента. Если выделение наложения выделяется в сегменте диафрагмы, драйвер мини-порта дисплея должен ограничить размер любого другого выделения, использующего этот сегмент диафрагмы в качестве сегмента вытеснения до 80 процентов размера сегмента. Драйвер мини-порта отображения указывает, что выделение может использовать сегмент для вытеснения, указав соответствующий бит для сегмента в EvictionSegmentSet член структуры DXGK_ALLOCATIONINFO для выделения. Если драйвер мини-порта отображения не ограничивает размер другого выделения, диспетчер памяти видео не может вытеснить выделение этого сегмента, так как закрепленное выделение (то есть выделение наложения) занимает область, необходимую для вытеснения. В этом случае содержимое другого выделения, вытесняемого, теряется, и приложение, которое владеет потерянным выделением, больше не может отображаться с этим выделением.
Установка этого элемента эквивалентна настройке девятого бита 32-разрядного элемента значение (0x00000100).
Capture
[out] Значение UINT, указывающее, используется ли выделение для операции записи. Выделение записей закрепляется в памяти аналогично выделению наложения. Таким образом, проблемы, которые применяются к выделению наложения, также применяются к выделению записей. Дополнительные сведения об этих проблемах см. в описании флага наложения. Обратите внимание, что до уровня три синхронизации обычно останавливаются.
Установка этого элемента эквивалентна настройке десятого бита 32-разрядного значения члена (0x00000200).
UseAlternateVA
[out] Значение UINT, указывающее, можно ли заблокировать основное выделение. UseAlternateVA действительна только для основного выделения. Если UseAlternateVA указано для любого другого выделения, выделение не создается. Когда основное выделение создается с помощью UseAlternateVA, при создании выделения настраивается диапазон свертывания для основного выделения.
Установка этого элемента эквивалентна настройке одиннадцатого бита 32-разрядного элемента значения (0x00000400).
SynchronousPaging
[out] Значение UINT, указывающее, следует ли выстраивает выделение синхронно. Если драйвер мини-порта дисплея задает этот бит для выделения, диспетчер памяти видео будет ждать, пока выделение больше не занято (то есть диспетчер памяти видео будет ожидать, пока графический модуль обработки (GPU) сообщает все заборы, ссылающиеся на выделение), прежде чем диспетчер памяти видео отправляет буфер разбиения, ссылающийся на выделение.
Аналогичным образом диспетчер памяти видео будет ожидать выполнения операции разбиения на страницы в синхронном выделении, прежде чем диспетчер памяти видео позволяет драйверу отправлять буфер прямого доступа к памяти (DMA).
Установка этого элемента эквивалентна настройке двенадцатого бита 32-разрядного элемента значение (0x00000800).
LinkMirrored
[out] Значение UINT, указывающее, следует ли реплицировать один экземпляр выделения во всех физических адаптерах в логическом адаптере (то есть ссылку). Диспетчер памяти видео вызывает драйвер на страницу и вытеснит выделение всех физических адаптеров с одним общим хранилищем резервной копии в системной памяти.
Установка этого элемента эквивалентна настройке тринадцатого бита 32-разрядного элемента значения (0x00001000).
LinkInstanced
[out] Значение UINT, указывающее, будут ли страницы разных экземпляров выделения и вытесняются из всех физических адаптеров в логический адаптер (т. е. ссылка). Одно хранилище резервной памяти системы существует на физический адаптер в логическом адаптере.
Установка этого элемента эквивалентна настройке 32-разрядного элемента значения (0x00002000).
HistoryBuffer
[out] Значение UINT, указывающее, выделяет ли драйвер отображения в пользовательском режиме буфер журнала. Драйвер мини-порта отображения должен задать этот флаг, чтобы указать, что драйвер пользовательского режима может управлять созданием и уничтожением буферов журнала.
Когда драйвер мини-порта отображения задает HistoryBuffer, он также должен задать флаг CpuVisible. Если драйвер поддерживает сегменты диафрагмы кэша, он также должен задать кэшированных, а все остальные элементы должны иметь значение нулю.
Установка этого элемента эквивалентна настройке пятнадцатого бита 32-разрядного значения значения (0x00004000).
Поддерживается начиная с Windows 8.1.
AccessedPhysically
Драйвер режима ядра задает флаг выделения, к которым обращается их физический адрес. Такое выделение будет выделено непрерывно из сегментов памяти GPU. Выделения не будут смежными при выделении из системной памяти.
Установка этого элемента эквивалентна настройке шестнадцатого бита 32-разрядного элемента значения (0x00008000).
Поддерживается начиная с Windows 10.
ExplicitResidencyNotification
При указании этих флагов драйвер получает NotifyResidency операции буфера разбиения на страницы при изменении расположения выделения (вытеснение, фиксация). Флаг можно задать только в том случае, если флаг AccessedPhysical.
Установка этого элемента эквивалентна настройке семнадцатого бита 32-разрядного элемента значения (0x00010000).
Поддерживается начиная с Windows 10.
HardwareProtected
Если этот элемент задан, выделение будет хранить содержимое, используемое для аппаратного управления цифровыми правами (DRM).
CpuVisibleOnDemand
Если этот элемент задан, диспетчер памяти видео будет пытаться выделить виртуальный адрес для выделения при сопоставлении или блокировке. Это приведет к тому, что выделение не имеет постоянного виртуального адреса, что сокращает объем используемого виртуального адресного пространства. Он работает аналогично флагу CpuVisible в том, что это выделение непосредственно доступно ЦП, но он просто получает виртуальный адрес для него "по запросу" вместо того, чтобы быть окончательно назначенным.
Reserved
Зарезервировано для использования системы. Доступно начиная с Windows 10.
DXGK_ALLOC_RESERVED16
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED15
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED14
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED13
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED12
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED11
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED10
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED9
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED4
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED3
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED2
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED1
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
DXGK_ALLOC_RESERVED0
[in] Этот элемент зарезервирован и должен иметь значение нулю. Поддерживается начиная с Windows 8.
Value
[out] Член в союзе, который DXGK_ALLOCATIONINFOFLAGS содержит, которое может содержать 32-разрядное значение, определяющее свойства выделения.
Замечания
Минипорт-драйвер дисплея, предназначенный для любой версии WDDM ранее WDDM 2.0, использует эту структуру для указания этих флагов для диспетчера памяти видео. Драйверы, предназначенные для версий WDDM >= WDDM 2.0, должны использовать DXGK_ALLOCATIONINFOFLAGS_WDDM2_0.
Вы можете указать свойства выделения, задав биты в 32-разрядном элементе значение или задав отдельные элементы структуры в союзе, содержащиеся в структуре DXGK_ALLOCATIONINFOFLAGS.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows Vista |
заголовка | d3dkmddi.h (include D3dkmddi.h) |