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


функция обратного вызова 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 позволяет графическим процессорам хранить состояние контекста из буферов 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.

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 8 (WDDM 1.2)
минимальный поддерживаемый сервер Windows Server 2012
целевая платформа Настольный
заголовка d3dkmddi.h (include D3dkmddi.h)
IRQL PASSIVE_LEVEL

См. также

DXGK_ALLOCATIONINFOFLAGS

DXGK_CREATECONTEXTFLAGS

DXGK_CREATEDEVICEFLAGS

DXGKARG_BUILDPAGINGBUFFER

DXGKARGCB_CREATECONTEXTALLOCATION

DXGKCB_DESTROYCONTEXTALLOCATION

DxgkDdiCreateContext

DxgkDdiCreateDevice

DXGKRNL_INTERFACE