функция обратного вызова DXGKDDI_CREATEALLOCATION (d3dkmddi.h)

Функция DxgkDdiCreateAllocation создает выделение системной или видеопамять.

Синтаксис

DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;

NTSTATUS DxgkddiCreateallocation(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_CREATEALLOCATION pCreateAllocation
)
{...}

Параметры

[in] hAdapter

Дескриптор для блока контекста, связанного с видеоадаптером. Драйвер мини-порта дисплея ранее предоставлял этот дескриптор подсистеме ядра графики Microsoft DirectX в выходном параметре MiniportDeviceContext функции DxgkDdiAddDevice .

[in/out] pCreateAllocation

Указатель на структуру DXGKARG_CREATEALLOCATION , содержащую сведения для создания выделений.

Возвращаемое значение

DxgkDdiCreateAllocation возвращает одно из следующих значений:

Код возврата Описание
STATUS_SUCCESS DxgkDdiCreateAllocation успешно создал выделение.
STATUS_INVALID_PARAMETER Параметры, переданные в DxgkDdiCreateAllocation , содержали ошибки, которые не позволяли выполнить его.
STATUS_NO_MEMORY DxgkDdiCreateAllocation не удалось выделить память, необходимую для ее завершения.
STATUS_GRAPHICS_DRIVER_MISMATCH Драйвер мини-порта дисплея несовместим с драйвером дисплея в пользовательском режиме, который инициировал вызов DxgkDdiCreateAllocation.

Комментарии

После того как драйвер отображения пользовательского режима вызывает функцию pfnAllocateCb , подсистема графического ядра DirectX вызывает функцию DxgkDdiCreateAllocation драйвера дисплея miniport для создания выделений. Драйвер мини-порта дисплея должен интерпретировать частные данные (в элементе pPrivateDriverDataструктуры DXGK_ALLOCATIONINFO для каждого выделения), передаваемые из драйвера отображения пользовательского режима, и должен определить список параметров, необходимых для создания каждого выделения с помощью диспетчера видеопамяти. Дополнительные сведения о том, как драйвер мини-порта дисплея предоставляет эти параметры диспетчеру видеопамяты, см. в разделе Указание сегментов при создании выделений.

Драйвер мини-порта дисплея должен возвращать дескриптор выделения, который обычно является указателем на структуру данных частного драйвера, содержащую сведения о выделении. Драйвер мини-порта дисплея может в любое время вызывать функцию DxgkCbGetHandleData , чтобы получить частные данные для дескриптора выделения. Таким образом, драйвер мини-порта дисплея не требуется для обслуживания таблицы частных дескрипторов выделения. На самом деле мы настоятельно рекомендуем использовать таблицы частных дескрипторов, так как они могут устареть или не синхронизироваться с подсистемой графического ядра DirectX в сценариях переключения режима отображения, таких как быстрое переключение пользователя, горячее отключение и т. д.

Драйвер отображения пользовательского режима назначает выделение либо ресурсу, либо устройству. Чтобы определить, принадлежит ли выделение ресурсу, драйвер мини-порта отображения может проверка, установлен ли флаг битового поля ресурса в элементе Flagsструктуры DXGKARG_CREATEALLOCATION, на которую указывает параметр pCreateAllocationdxgkDdiCreateAllocation. Если выделение принадлежит ресурсу, драйвер мини-порта отображения может (но не обязательно) возвращать дескриптор ресурса, который обычно является указателем на структуру данных частного драйвера, описывающую ресурс. Если подсистема ядра графики DirectX вызывает DxgkDdiCreateAllocation для создания дополнительного выделения для существующего ресурса, элемент hResource DXGKARG_CREATEALLOCATION содержит дескриптор, возвращенный предыдущим вызовом DxgkDdiCreateAllocation для этого ресурса. При необходимости драйвер мини-порта дисплея может изменить дескриптор ресурса во время вызова DxgkDdiCreateAllocation.

Если драйвер отображения пользовательского режима помещает дескриптор ресурса в буфер команд, драйвер мини-порта дисплея может получить частные данные, вызвав DxgkCbGetHandleData. Драйвер мини-порта дисплея также может перечислить все дочерние выделения ресурса, вызвав функцию DxgkCbEnumHandleChildren .

Начиная с Windows 7, если драйвер мини-порта дисплея обрабатывает вызов функции DxgkDdiCreateAllocation для создания выделений для аппаратного ускорения GDI, драйвер должен задать размер выделения (включая значение шага для видимых выделений ЦП), pCreateAllocation-pAllocationInfo-Size>.>

Ресурсы, созданные в вызове DxgkDdiCreateAllocation , принадлежат адаптеру, а не устройству. Драйвер мини-порта дисплея не должен ссылаться на данные устройства в пределах частных структур распределения и данных ресурсов. Из-за общего доступа к surface ресурс может использоваться после уничтожения устройства, на котором драйвер отображения пользовательского режима создал ресурс.

DxgkDdiCreateAllocation следует сделать страничной.

Выделение буферов журнала

Начиная с Windows 8.1, при вызове DxgkDdiCreateAllocation драйвер мини-порта дисплея может задать DXGK_ALLOCATIONINFOFLAGS.Элемент HistoryBuffer, указывающий, что драйвер пользовательского режима может управлять созданием и уничтожением буферов журнала.

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Целевая платформа Персональный компьютер
Верхняя часть d3dkmddi.h
IRQL PASSIVE_LEVEL

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

DXGKARG_CREATEALLOCATION

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkCbEnumHandleChildren

DxgkCbGetHandleData

DxgkDdiAddDevice

pfnAllocateCb