Поделиться через


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

Функция драйвера в режиме ядра (KMD) DxgkDdiCreateAllocation создает выделение системной или видеопамяты.

Синтаксис

DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;

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

Параметры

[in] hAdapter

Дескриптор к блоку контекста, связанному с адаптером отображения. KmD ранее предоставил этот дескриптор для Dxgkrnlв параметре вывода miniportDeviceContext функции DxgkDdiAddDevice.

[in/out] pCreateAllocation

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

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

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

код возврата описание
STATUS_SUCCESS DxgkDdiCreateAllocation успешно создали выделение.
STATUS_INVALID_PARAMETER Переданные параметры содержали ошибки, которые препятствовали завершению DxgkDdiCreateAllocation.
STATUS_NO_MEMORY DxgkDdiCreateAllocation не удалось выделить память, необходимую для завершения.
STATUS_GRAPHICS_DRIVER_MISMATCH KMD несовместим с драйвером отображения пользовательского режима (UMD), инициирующим вызов DxgkDdiCreateAllocation.

Замечания

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

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

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

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

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

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

DxgkDdiCreateAllocation должен быть доступен для страницы.

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista
целевая платформа Настольный
заголовка d3dkmddi.h
IRQL PASSIVE_LEVEL

См. также

DXGKARG_CREATEALLOCATION

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkCbEnumHandleChildren

DxgkCbGetHandleData

DxgkDdiAddDevice

pfnAllocateCb