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


функция обратного вызова 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(status) равно TRUE. Если возникает ошибка, идентификатор idD должен возвращать STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN если есть хорошая вероятность того, что ошибка не повторится снова. В противном случае он должен вернуть соответствующий код ошибки NTSTATUS . См. заметки.

Комментарии

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

Если EvtIddCxMonitorAssignSwapChain возвращает успешное выполнение, idD является владельцем объекта 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
Целевая платформа Windows
Header iddcx.h
IRQL requires_same

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

EvtIddCxMonitorUnassignSwapChain

IDARG_IN_SETSWAPCHAIN