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


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

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN вызывается ОС для информирования о непрямом драйвере отображения (IDD) изменения режима для мониторов на адаптере.

Синтаксис

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN EvtIddCxMonitorAssignSwapchain;

NTSTATUS EvtIddCxMonitorAssignSwapchain(
  [in] IDDCX_MONITOR MonitorObject,
  [in] const IDARG_IN_SETSWAPCHAIN *pInArgs
)
{...}

Параметры

[in] MonitorObject

Непрозрачный, созданный драйвером IDDCX_MONITOR дескриптор, используемый ОС для идентификации монитора, на который повлияло изменение режима.

[in] pInArgs

Указатель на структуру IDARG_IN_SETSWAPCHAIN, содержащую сведения для драйвера, используемого для установки косвенной цепочки буферов.

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

(NTSTATUS) Если операция выполнена успешно, функция обратного вызова должна возвращать STATUS_SUCCESS или другое значение состояния, для которого NT_SUCCESS(состояние) равно TRUE. Если возникает ошибка, идентификатор должен вернуть STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN, если есть хороший шанс, что ошибка не будет возникать снова. В противном случае он должен вернуть соответствующий код ошибки NTSTATUS. См. примечания.

Замечания

ОС вызывает EvtIddCxMonitorAssignSwapChain, чтобы идентификатор можно было настроить механизм обработки кадров. Например, идентификатор может создать новый поток для инициализации устройств D3D, а затем выполнить цикл по кадрам обработки (см. пример драйвера идентификатора ).

Если EvtIddCxMonitorAssignSwapChain возвращает успех, идентификатор идентификатора затем владеет объектом IDARG_IN_SETSWAPCHAIN.hSwapChain и отвечает за вызов WdfObjectDelete, чтобы освободить объект цепочки буферов при остановке обработки кадров. Обработка цепочки буферов может остановить обработку кадров, если EvtIddCxMonitorUnassignSwapChain вызывается или когда ошибка возникает в цикле обработки кадров после возвращения успешного выполнения в EvtIddCxMonitorAssignSwapChain. Это относится как к адаптерам консоли, так и к удаленным идентификаторам и ко всем версиям IddCx.

Начиная с Windows 10 версии 1903, чтобы уменьшить влияние пользователя (например, время, затраченное на ожидание iddCx для проверки ошибки драйвера), IddCx немедленно проверит драйвер, если EvtIddCxMonitorAssignSwapChain сообщает код ошибки, отличный от STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN.

Если драйвер возвращает STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN, IddCx сообщит о компосторе рабочего стола. Необходимо создать новую цепочку буферов, поэтому ОС снова вызовет EvtIddCxMonitorAssignSwapChain. Драйвер идентификатора должен использовать этот код возврата только в том случае, если есть хороший шанс, что ошибка, которая только что произошла, не будет возникать снова. То есть драйвер идентификатора не должен оставлять пользователей с неиспользуемым рабочим столом, так как он вернул код ошибки, но ничего не сделал, чтобы убедиться, что тот же сбой не будет повторяться. Например, если драйвер сталкивается с ошибкой при создании устройства D3D на адаптере отрисовки, он может вызвать IddCxAdapterSetRenderAdapter, чтобы изменить другой адаптер (возможно, другой GPU или WARP), а затем вернуть STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN. ОС создаст новую цепочку буферов на новом адаптере отрисовки и, надеюсь, избежать ошибки. Хотя этот код ошибки определен начиная с Windows 10 версии 1903, драйвер идентификатора может вернуть этот код ошибки в предыдущих выпусках ОС, что не повлияет.

Разрешение поверхностей в цепочке буферов всегда будет совпадать с разрешением целевого режима.

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10
минимальный поддерживаемый сервер Windows Server 2016
целевая платформа Виндоус
заголовка iddcx.h
IRQL requires_same

См. также

EvtIddCxMonitorUnassignSwapChain

IDARG_IN_SETSWAPCHAIN