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

DXGKCB_CREATECONTEXTALLOCATION выделяет контекст GPU или контекст для конкретного устройства.

Синтаксис

DXGKCB_CREATECONTEXTALLOCATION DxgkcbCreatecontextallocation;

NTSTATUS DxgkcbCreatecontextallocation(
  [in/out] INOUT_PDXGKARGCB_CREATECONTEXTALLOCATION unnamedParam1
)
{...}

Параметры

[in/out] unnamedParam1

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

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

DXGKCB_CREATECONTEXTALLOCATION возвращает STATUS_SUCCESS в случае успешного выполнения. В противном случае возвращается один из кодов ошибок, определенных в ntstatus.h.

Комментарии

Начиная с WDDM 1.2, драйверы мини-портов дисплея могут выделять контекст для GPU (выделение контекста GPU) или контекст устройства (выделение контекста устройства).

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

Кроме того, операционная система поддерживает отложенное переключение контекста GPU, предполагая, что состояние контекста оборудования сохраняется на GPU после выполнения команды, которая принадлежит контексту. Таким образом, контексты переключаются на GPU только при отправке команды из другого контекста в очередь оборудования.

DXGKCB_XXX функции реализуются Dxgkrnl. Чтобы использовать эту функцию обратного вызова, задайте члены DXGKARGCB_ALLOCATEPAGESFORMDL , а затем вызовите DxgkCbCreateContextAllocation через DXGKRNL_INTERFACE.

Выделение контекста GPU

Выделение контекста GPU может выполняться только для несистемных контекстов. Драйвер мини-порта дисплея создает эти контексты, вызывая DxgkDdiCreateContext. Чтобы создать несистемный контекст, драйвер устанавливает элемент SystemContextструктуры DXGK_CREATECONTEXTFLAGS равным нулю и передает указатель на эту структуру в параметре pCreateContext .

Выделение контекста устройства соответствует аналогичной модели, за исключением того, что оно остается резидентным для любого контекста, относящегося к устройству, с которым оно связано. Эта модель позволяет драйверам использовать выделения контекста GPU для хранения данных о области сохранения контекста GPU (CSA) и использовать выделения контекста устройства для хранения данных таблицы страниц.

Выделение контекста устройства

Выделение контекста устройства может выполняться только для несистемных устройств. Драйвер мини-порта дисплея создает эти устройства, вызывая DxgkDdiCreateDevice. Чтобы создать несистемное устройство, драйвер устанавливает элемент Flags.SystemDeviceструктуры DXGK_CREATEDEVICEFLAGS равным нулю и передает указатель на эту структуру в параметре pCreateDevice .

Драйвер мини-порта дисплея вызывает DXGKCB_DESTROYCONTEXTALLOCATION , чтобы освободить контекстные ресурсы, выделенные с помощью DxgkCbCreateContextAllocation.

Виртуальные адреса для выделения контекста назначения

Чтобы убедиться, что операционная система задает допустимый (не null) виртуальный адрес для выделения контекста назначения (элемент InitContextResource-Destination-VirtualAddress>> структуры DXGKARG_BUILDPAGINGBUFFER), когда драйвер мини-порта отображения вызывает DxgkCbCreateContextAllocation, необходимо:

  • Задайте элементы CpuVisible и Protected структуры DXGK_ALLOCATIONINFOFLAGS .
  • Страница в выделении только сегментов диафрагмы путем задания элемента SupportedSegmentSet структуры DXGKARGCB_CREATECONTEXTALLOCATION .

Требования

Требование Значение
Минимальная версия клиента Windows 8 (WDDM 1.2)
Минимальная версия сервера Windows Server 2012
Целевая платформа Персональный компьютер
Верхняя часть d3dkmddi.h (включая D3dkmddi.h)
IRQL PASSIVE_LEVEL

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

DXGK_ALLOCATIONINFOFLAGS

DXGK_CREATECONTEXTFLAGS

DXGK_CREATEDEVICEFLAGS

DXGKARG_BUILDPAGINGBUFFER

DXGKARGCB_CREATECONTEXTALLOCATION

DXGKCB_DESTROYCONTEXTALLOCATION

DxgkDdiCreateContext

DxgkDdiCreateDevice

DXGKRNL_INTERFACE