Обзор драйвера непрямого отображения
Модель непрямого драйвера отображения (IDD) предоставляет простую модель драйвера в пользовательском режиме для поддержки мониторов, которые не подключены к традиционным выходным данным графического процессора. Некоторые типичные сценарии, в которых требуется идентификатор:
- Потоковая передача выходных данных отображения по сети удаленному клиенту (удаленному отображению).
- Создание виртуальных мониторов для таких приложений, как среды виртуального рабочего стола (виртуальные экраны).
- Подключение адаптера к компьютеру через USB с обычным монитором (VGA, DVI, HDMI, DP и т. д.) подключен к нему.
Реализация IDD
Идентификатор — это сторонний драйвер UMDF для устройства. Вы можете разработать идентификатор с помощью функциональных возможностей, предоставляемых IddCx (класс eXtension непрямого дисплея) для взаимодействия с графическими подсистемами Windows следующими способами:
- Создайте графический адаптер, представляющий непрямое устройство отображения.
- Мониторы отчетов подключены и отключены от системы.
- Укажите описания подключенных мониторов.
- Укажите доступные режимы отображения.
- Поддержка других функций отображения, таких как аппаратный курсор мыши, гамма-связь, связь I2C и защищенное содержимое.
- Обработайте изображения рабочего стола для отображения на мониторе.
Так как ИДЕНТИФИКАТОР является драйвером UMDF, он также отвечает за реализацию всех функций UMDF , таких как связь с устройствами, управление питанием, подключаемый модуль и т. д.
IdD выполняется в сеансе 0 без каких-либо компонентов, работающих в сеансе пользователя, поэтому любая нестабильность драйвера не влияет на стабильность системы в целом.
На следующей схеме представлен обзор архитектуры.
Модель пользовательского режима
Идентификатор — это модель только в пользовательском режиме без поддержки компонентов режима ядра. Таким образом, драйвер может использовать любые API DirectX для обработки образа рабочего стола. Фактически IddCx предоставляет образ рабочего стола для кодирования в поверхности DirectX.
Драйвер не должен вызывать API режима пользователя, которые не подходят для использования драйвера, таких как GDI, интерфейсы API окон, OpenGL или Vulkan.
Идентификатор должен быть создан в качестве универсального драйвера windows, чтобы его можно было использовать на нескольких платформах Windows.
Во время сборки:
- Идентификатор UMDF объявляет версию IddCx, для нее была создана.
- ОС гарантирует, что правильная версия IddCx загружается при загрузке драйвера.
Соглашения об именовании функций и обратного вызова IddCx
Префикс | Тип | Примечания. |
---|---|---|
EVT_IDD_CX_XXX | Функция обратного вызова IDD | Идентификаторы реализуют такие обратные вызовы, как IddCx, такие как EVT_IDD_CX_ADAPTER_COMMIT_MODES, так и соответствующие обратные вызовы WDF, такие как EVT_WDF_DEVICE_D0_EXIT. |
IddCxXxx | Function | Системные функции расширения класса IddCx, которые могут вызывать идентификаторы; например, IddCxAdapterInitAsync. |
PFN_IDDCX_XXX | Указатели на функции IddCx | Идентификаторы не используют эти указатели. Вместо этого драйверы должны использовать эквивалентные функции IddCxXxx . |
Пример кода
Корпорация Майкрософт предоставляет пример реализации идентификаторов в GitHub для примеров драйверов Windows. В этом примере показано, как подключить монитор, как реагировать на набор режимов и как получать кадры.