структура DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 (d3dkmddi.h)

Структура DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 определяет свойства для выделения.

Синтаксис

typedef struct _DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 {
  union {
    struct {
      UINT CpuVisible : 1;
      UINT PermanentSysMem : 1;
      UINT Cached : 1;
      UINT Protected : 1;
      UINT ExistingSysMem : 1;
      UINT ExistingKernelSysMem : 1;
      UINT FromEndOfSegment : 1;
      UINT DisableLargePageMapping : 1;
      UINT Overlay : 1;
      UINT Capture : 1;
      UINT CreateInVpr : 1;
      UINT Reserved00 : 1;
      UINT DXGK_ALLOC_RESERVED17 : 1;
      UINT Reserved02 : 1;
      UINT MapApertureCpuVisible : 1;
      UINT Reserved03 : 1;
      UINT HistoryBuffer : 1;
      UINT AccessedPhysically : 1;
      UINT ExplicitResidencyNotification : 1;
      UINT HardwareProtected : 1;
      UINT CpuVisibleOnDemand : 1;
      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_WDDM2_0;

Члены

CpuVisible

[out] Значение UINT, указывающее, доступен ли выделение напрямую ЦП. Драйвер минипорта дисплея должен установить этот флаг для драйвера отображения пользовательского режима, чтобы успешно вызывать функцию pfnLockCb при выделении. Если этот флаг не установлен для выделения, функция pfnLockCb возвращает ошибку.

Обратите внимание, что только процесс, создавший общее выделение, может заблокировать это выделение.

Задание этого элемента эквивалентно установке первого бита 32-разрядного элемента Value (0x00000001).

PermanentSysMem

[out] Значение UINT, указывающее, должна ли копия выделения храниться в системной памяти, даже если содержимое находится в сегменте памяти. По умолчанию резервное хранилище памяти контактной системы теряется при передаче выделения в сегмент памяти. При указании флага PermanentSysMem и вытеснения выделения из сегмента памяти содержимое выделения удаляется и не выгружается, если выделение не грязное (т. е. выделение не было целевым объектом операции записи, так как оно было выброшено на страницу).

Вызов pfnLockCb при выделении всегда возвращает резервное хранилище системной памяти для выделения. Если выделение находится в сегменте памяти, когда драйвер отображения пользовательского режима вызывает pfnUnlockCb, ресурс сегмента памяти для выделения обновляется новым содержимым. Это обновление отображается в драйвере мини-порта дисплея как обычная операция разбиения по страницам с помощью функции DxgkDdiBuildPagingBuffer . Обратите внимание, что если драйверу мини-порта дисплея требуется минимальный размер области или выравнивание для операции разбиения по страницам, это требование должно отражаться в области, которая блокируется. Когда драйвер задает Параметр PermanentSysMem, драйвер также должен задать элемент CpuVisible . Драйвер не должен устанавливать Параметр PermanentSysMem на основной поверхности.

Задание этого элемента эквивалентно установке второго бита 32-разрядного элемента Value (0x00000002).

Cached

[out] Значение UINT, указывающее, должно ли резервное хранилище выделяться как кэшированная память; По умолчанию резервное хранилище выделения хранится в виде объединенной памяти для записи. Если выделение кэшированных памяти используется в сегменте, который не является согласованным в кэше (например, сегмент памяти или сегмент AGP), диспетчер видеопамятия обеспечивает согласованность содержимого выделения, очищая его из кэша процессора в соответствующее время.

Когда драйвер задает cached , а также задает элемент ExistingSysMem или ExistingKernelSysMem , драйвер указывает диспетчеру видеопамять, что существующая память была сопоставлена кэшируемой. Если существующая память была сопоставлена кэшируемой, но драйверу не удается задать элемент Cached , диспетчер видеопаметь не может обеспечить параллелизм данных и происходит повреждение. Драйвер должен задать элемент Cached для выделения, который должен считываться приложением или драйвером отображения в пользовательском режиме. Драйвер никогда не должен задавать элемент Cached для выделения только для записи.

Когда драйвер задает этот элемент, драйвер должен также задать элемент CpuVisible . Драйвер не должен устанавливать значение Cached на основной поверхности.

Задание этого элемента эквивалентно установке третьего бита 32-разрядного элемента Value (0x00000004).

Protected

[out] Значение UINT, указывающее, следует ли выделять резервное хранилище в памяти ядра, а не в адресном пространстве пользователя, чтобы защитить выделение от потенциального прямого доступа к ЦП со стороны приложения. Драйвер не может задать этот элемент в сочетании с элементом PermanentSysMem, ExistingSysMem или ExistingKernelSysMem . Драйвер не должен устанавливать параметр Защищенный на основной поверхности.

Задание этого элемента эквивалентно установке четвертого бита 32-разрядного элемента Value (0x00000008).

ExistingSysMem

[out] Значение UINT, указывающее, должен ли диспетчер видеопамяти использовать существующий системный диапазон памяти в качестве резервного хранилища для выделения. Диапазон системной памяти должен быть допустимым адресом в пользовательском режиме для текущего процесса для размера выделения. Диапазон системной памяти также должен быть выровнен по страницам и иметь кратный размер страницы.

Если диапазон системной памяти является кэшируемым виртуальным адресом, драйвер должен задать элемент Cached , чтобы сообщить диспетчеру видеопаметь, чтобы обеспечить когерентность кэша при выделении. Если элемент Cached не указан, диспетчер видеопамятки определяет, что системный диапазон памяти является несмеченным, комбинированным или кэшируемым; однако в этой ситуации драйвер либо обеспечивает когерентность кэша, либо определяет, что когерентность кэша не является проблемой для указанного использования.

Обратите внимание, что этот тип выделения неявно имеет ту же семантику блокировки, что и выделение, в котором задан член PermanentSysMem .

Драйвер не может задать ExistingSysMem в сочетании с членом PermanentSysMem, Protected или ExistingKernelSysMem . Драйвер не должен устанавливать ExistingSysMem на основной поверхности.

Задание этого элемента эквивалентно установке пятого бита 32-разрядного элемента Value (0x00000010).

ExistingKernelSysMem

[out] Значение UINT, указывающее, должен ли диспетчер видеопамяти использовать существующий системный диапазон памяти в качестве резервного хранилища для выделения. Диапазон системной памяти должен быть допустимым адресом в режиме ядра, который выравнивается по странице и странице, кратной по размеру.

Если диапазон системной памяти является кэшируемым виртуальным адресом, драйвер должен задать элемент Cached , чтобы сообщить диспетчеру видеопаметь, чтобы обеспечить когерентность кэша при выделении. Если элемент Cached не указан, диспетчер видеопамятки определяет, что системный диапазон памяти является несмеченным, комбинированным или кэшируемым; однако в этой ситуации драйвер либо обеспечивает когерентность кэша, либо определяет, что когерентность кэша не является проблемой для указанного использования.

Обратите внимание, что этот тип выделения неявно имеет ту же семантику блокировки, что и выделение, в котором задан член PermanentSysMem .

Драйвер не может задать ExistingKernelSysMem в сочетании с элементом PermanentSysMem, Protected или ExistingSysMem . Драйвер не должен устанавливать ExistingKernelSysMem на основной поверхности.

Задание этого элемента эквивалентно установке шестого бита 32-разрядного элемента Value (0x00000020).

FromEndOfSegment

[out] Значение UINT, указывающее, следует ли выделять выделение из конца сегмента во время разбиения по страницам. Диспетчер видеопаметь сканирует адресное пространство сегмента и ищет место для выделения в конце сегмента, а не с начала сегмента (это поведение по умолчанию). Однако намеченная и предпочтительная информация о сегменте имеет прецедент над этим флагом.

Задание этого элемента эквивалентно установке седьмого бита 32-разрядного элемента Value (0x00000040).

DisableLargePageMapping

[out] Значение UINT, указывающее, следует ли отключать сопоставление больших страниц для выделения. Поддержка больших страниц для драйверов была добавлена начиная с версии WDDM2.1. Большие страницы используются при переводе виртуальных адресов, где таблица страниц нижнего уровня заменяется большой страницей с одинаковым охватом таблицы страниц уровня 0. Этот флаг отключает этот параметр и использует таблицу страниц для преобразования адресов.

Задание этого элемента эквивалентно установке восьмого бита 32-разрядного элемента Value (0x00000080).

Overlay

[out] Значение UINT, указывающее, предназначено ли выделение для операции наложения. Выделения наложения закрепляются в памяти, и диспетчер видеопамяти не может вытеснить их, если не будет остановлен процесс обнаружения и восстановления времени ожидания (TDR), Plug and Play (PnP) или синхронизация третьего уровня. Обратите внимание, что до синхронизации третьего уровня наложения обычно уничтожаются. По умолчанию выделения наложения ограничены и не могут занимать более 20% сегмента. Если выделение наложения выделяется в сегменте диафрагмы, драйвер минипорта дисплея должен ограничить размер любого другого выделения, использующего этот сегмент диафрагмы в качестве сегмента вытеснения, до 80 процентов от размера сегмента. Драйвер мини-порта отображения указывает, что выделение может использовать сегмент для вытеснения, указав соответствующий бит для сегмента в элементе EvictionSegmentSetструктуры DXGK_ALLOCATIONINFO для выделения. Если драйвер минипорта дисплея не ограничивает размер другого выделения, диспетчер видеопамяти не может вытеснить это выделение через сегмент, так как закрепленное выделение (т. е. выделение наложения) занимает область, необходимую для вытеснения. В этом случае содержимое другого вытесняемого выделения теряется, и приложение, владеющее потерянным выделением, больше не может выполнять отрисовку с этим выделением.

Задание этого элемента эквивалентно установке девятого бита 32-разрядного элемента Value (0x00000100).

Capture

[out] Значение UINT, указывающее, используется ли выделение для операции записи. Выделение записей закрепляется в памяти аналогично выделению наложения. Таким образом, проблемы, которые применяются к наложению выделений, также относятся к выделению записей. Дополнительные сведения об этих проблемах см. в описании флага наложения . Обратите внимание, что перед синхронизацией третьего уровня записи обычно останавливаются.

Задание этого элемента эквивалентно установке десятого бита 32-разрядного элемента Value (0x00000200).

CreateInVpr

[out] Значение UINT, указывающее, следует ли создавать выделение в диапазоне, защищенном видео. Этот элемент используется для аппаратного управления цифровыми правами (DRM) в версиях >WDDM = WDDM 2.1.

Задание этого элемента эквивалентно установке одиннадцатого бита 32-разрядного элемента Value (0x00000400).

Reserved00

[in] Для версий WDDM, предшествующих WDDM 2.1, этот элемент зарезервирован и должен иметь нулевое значение.

Задание этого элемента эквивалентно установке одиннадцатого бита 32-разрядного элемента Value (0x00000400).

DXGK_ALLOC_RESERVED17

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

Задание этого элемента эквивалентно установке двенадцатого бита 32-разрядного элемента Value (0x00000800).

Reserved02

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

Задание этого элемента эквивалентно установке тринадцатого бита 32-разрядного элемента Value (0x00001000).

MapApertureCpuVisible

[in] Если задано значение , указывает, что драйверу требуется доступ ЦП к памяти во время вызова DxgkDdiBuildPagingBuffer для операции DXGK_OPERATION_MAP_APERTURE_SEGMENT2 . MapApertureCpuVisible является частью функциональных возможностей MapAperatureSegment2DxgkDdiBuildPagingBuffer, поэтому драйвер должен задать DXGK_VIDMMCAPS MapAperature2Supported для использования этого поля. Если параметр MapAperature2Supported не задан, но драйвер указывает MapApertureCpuVisible, вызов DxgkDdiCreateAllocation завершится ошибкой. Дополнительные сведения см. в разделе Переназначение DMA IOMMU . Поддерживается начиная с Windows Server 2022.

Reserved03

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

HistoryBuffer

[out] Значение UINT, указывающее, выделяет ли драйвер отображения пользовательского режима буфер журнала. Драйвер мини-порта дисплея должен установить этот флаг, чтобы указать, что драйвер пользовательского режима может управлять созданием и уничтожением буферов журнала.

Когда драйвер мини-порта дисплея устанавливает HistoryBuffer, он также должен установить флаг CpuVisible . Если драйвер поддерживает сегменты диафрагмы, когерентные в кэше, он также должен задать значение Cached, а все остальные элементы должны иметь нулевое значение.

Задание этого элемента эквивалентно установке пятнадцатого бита 32-разрядного элемента Value (0x00004000).

AccessedPhysically

Драйвер режима ядра устанавливает флаг для выделений, к которым обращается их физический адрес. Такое выделение будет выделяться непрерывно из сегментов памяти GPU. Выделения не будут непрерывными при выделении из системной памяти.

Задание этого элемента эквивалентно установке шестнадцатого бита 32-разрядного элемента Value (0x00008000).

ExplicitResidencyNotification

При указании этих флагов драйвер получает операцию буфера разбиения по страницам NotifyResidency при изменении места размещения (вытеснении, фиксации). Флаг можно установить, только если установлен флаг AccessedPhysically .

Задание этого элемента эквивалентно установке семнадцатого бита 32-разрядного элемента Value (0x00010000).

HardwareProtected

Если этот элемент задан, выделение будет содержать содержимое, используемое для аппаратного управления цифровыми правами.

CpuVisibleOnDemand

Если этот элемент задан, диспетчер видеопамяти попытается выделить виртуальный адрес для выделения при сопоставлении или блокировке. Это приведет к тому, что при выделении не будет постоянного виртуального адреса, что сокращает объем используемого виртуального адресного пространства. Он ведет себя аналогично флагу CpuVisible в том, что это выделение напрямую доступно ЦП, но он просто получает виртуальный адрес для него "по запросу", а не назначается постоянно.

DXGK_ALLOC_RESERVED16

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED15

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED14

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED13

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED12

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED11

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED10

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED9

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED4

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED3

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED2

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED1

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

DXGK_ALLOC_RESERVED0

[in] Этот элемент зарезервирован и должен иметь нулевое значение.

Value

[out] Член объединения, который DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 содержит, который может содержать 32-разрядное значение, определяющее свойства выделения.

Комментарии

Драйвер мини-порта дисплея, предназначенный для любой версии >WDDM = WDDM 2.0, использует эту структуру для указания этих флагов для диспетчера видеопамяли. Драйверы, предназначенные для версий WDDM, предшествующих WDDM 2.0, должны использовать DXGK_ALLOCATIONINFOFLAGS.

Вы можете указать свойства выделения, задав биты в 32-разрядном элементе Value или задав отдельные члены структуры в объединении, которое содержит структура DXGK_ALLOCATIONINFOFLAGS .

Требования

Требование Значение
Минимальная версия клиента Windows 10
Верхняя часть d3dkmddi.h (включая D3dkmddi.h)

См. также раздел

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb