структура 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-разрядного элемента 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).

Swizzled

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

Задание этого элемента эквивалентно установке восьмого бита 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).

UseAlternateVA

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

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

SynchronousPaging

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

Аналогичным образом диспетчер видеопамяти будет ожидать завершения операции разбиения на страницы синхронного выделения, прежде чем диспетчер видеопамяти позволит драйверу отправить буфер прямого доступа к памяти (DMA) без разбиения по страницам.

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

LinkMirrored

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

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

LinkInstanced

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

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

HistoryBuffer

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

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

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

Поддерживается начиная с Windows 8.1.

AccessedPhysically

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

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

Поддерживается начиная с Windows 10.

ExplicitResidencyNotification

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

Задание этого элемента эквивалентно установке семнадцатого бита 32-разрядного элемента Value (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-разрядном элементе Value или задав отдельные члены структуры в объединении, которое содержит структура DXGK_ALLOCATIONINFOFLAGS .

Требования

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

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

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS_WDDM2_0

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb