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


Обновления для iddCx версии 1.10 и более поздних версий

В этой статье описываются обновления, внесенные в IddCx версии 1.10. В Windows 10 версии 1803 и более поздних версий можно запустить один двоичный файл драйвера непрямого отображения (IDD), созданный для iddCx 1.10, и более поздней версии, с помощью проверок среды выполнения, чтобы проверить, доступны ли изменения DDI в IddCx 1.10 в этой системе. Дополнительные сведения см. в статье о создании драйвера WDF для нескольких версий Windows.

Изменения IddCx 1.10 делятся на следующие категории:

  • Обновите версию IddCxGetVersion (консоль и удаленный). Полный список сведений о версии, связанных с IddCx, см. в разделе "Версии IddCx".
  • Добавьте поддержку hdR10 (высокий динамический диапазон) и SDR (стандартный динамический диапазон) wide Color Gamut (WCG) для непрямых дисплеев.

Обновленная версия IddCxGetVersion

Значение, возвращаемое IddCxGetVersion , было обновлено, но отличается в зависимости от ОС:

  • Выпуск платформы Windows 11 версии 24H2 возвращает 0x1A80 (IDDCX_VERSION_GERMANIUM).
  • Обновление Windows 11 версии 22H2 сентября возвращает 0x1A00 (IDDCX_VERSION_SV3).

Это управление версиями имеет важное значение для удаленных драйверов, где поведение ОПЕРАЦИОННОй системы немного отличается.

Поддержка цветовой гаммы HDR и SDR

Дополнительные сведения о цвете в Windows, включая WCG SDR, см . в разделе DirectX с расширенным цветом на дисплеях HDR и SDR.

Поддержка DDI драйвера и ОС

По возможности существующие DDIS были расширены, чтобы разрешить драйверу сообщать о поддержке:

  • HDR10
  • SDR WCG
  • Получение данных, описывающих все кадры HDR, отправленные идентификатору

Новые варианты существующих DDIs были добавлены, если существующие DDIs не могут быть расширены. В большинстве случаев эти изменения применимы как к консоли, так и к удаленным драйверам, но некоторые сведения, относящиеся к удаленным драйверам, также определены.

Версии 1.10 и более поздних драйверов, поддерживающих HDR, необходимо использовать более новые варианты DDI. Старые драйверы или драйверы, которые не поддерживают HDR, могут продолжать использовать существующие функции. Общие сведения об изменениях приведены в разделах, приведенных ниже.

В следующей таблице перечислены реализованные драйвером DDIS, добавленные в IddCx 1.10, и имена предыдущего эквивалента, если существовал один. ОС может вызывать эти функции, если драйвер сообщает им, даже для адаптеров, которые не пытаются поддерживать HDR.

Функции драйвера, вызываемые ОС для адаптеров HDR Предыдущая эквивалентная функция
EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO Н/П
EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA* Н/П
EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION2** EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION
EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES2 EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES
EVT_IDD_CX_ADAPTER_COMMIT_MODES2 EVT_IDD_CX_ADAPTER_COMMIT_MODES

*: функция не вызывается для удаленных драйверов.

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

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

Новые функции, которые драйвер должен вызывать для адаптеров HDR Предыдущий эквивалент
IddCxSwapChainReleaseAndAcquireBuffer2 IddCxSwapChainReleaseAndAcquireBuffer/IddCxSwapChainReleaseAndAcquireSystemBuffer
IddCxMonitorQueryHardwareCursor3 IddCxMonitorQueryHardwareCursor2 или IddCxMonitorQueryHardwareCursor
IddCxAdapterDisplayConfigUpdate2* IddCxAdapterDisplayConfigUpdate*
IddCxMonitorUpdateModes2 IddCxMonitorUpdateModes

*. Для использования только удаленными драйверами.

Поддержка HDR адаптера отчетов

Драйверы версии 1.10 и выше должны задать флаг IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16, добавленный в IDDCX_ADAPTER_FLAGS, чтобы сообщить о поддержке поверхностей FP16. Поверхности FP16 можно использовать для HDR10 или только для SDR WCG. Этот флаг подразумевает, что драйвер выполняет все необходимые действия для включения HDR10 или WCG SDR, включая:

Возможности HDR для создания отчетов

Если драйвер хочет включить HDR для адаптера, он должен предоставить дополнительные сведения о каждом целевом соединителе через функцию EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO . Требуется информация о целевом соединителе, так как только некоторые из доступных целевых объектов могут поддерживать некоторые аспекты HDR.

Метаданные HDR

Когда драйвер предоставляет дескриптор монитора, содержащий метаданные HDR, ОС вызывает EVT_IDD_CX_MONITOR_SET_DEFAULT_HDR_METADATA , чтобы предоставить метаданные HDR по умолчанию драйверу. Драйвер должен хранить эти данные по умолчанию и использовать его при отправке кадров сведений HDR10 (SMPTE ST.2086) в монитор. Когда драйвер вызывает IddCxSwapChainReleaseAndAcquireBuffer2, ОС также предоставляет сведения о метаданных HDR. Если эти метаданные указывают на то, что следует использовать значение по умолчанию, он ссылается на сохраненные данные по умолчанию.

При установке режима HDR ОС отправляет состояние метаданных HDR с каждым кадром. Эти метаданные сообщают драйверу, какие метаданные HDR следует использовать через представленную IDDCX_METADATA2 структуру. Метаданные — это либо новый блок метаданных, либо указывает, что драйвер должен использовать метаданные по умолчанию, предоставленные ос ранее или те же метаданные, что и предыдущий кадр.

Примечание. Метаданные HDR недоступны для удаленных драйверов, так как все метаданные HDR10 должны поступать из подсистемы отображения на клиенте.

Создание отчетов в режимах HDR

При подключении дисплея к целевому объекту ОС запрашивает драйвер для поддерживаемых в настоящее время режимов мониторинга и целевых режимов. Чтобы правильно объявить возможности HDR, для каждого из этих режимов требуется дополнительная информация, поэтому драйвер HDR должен предоставлять следующие DDIS, представленные в версии 1.10:

  • EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION2 возвращает список IDDCX_MONITOR_MODE2 структур.
  • EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES2 возвращает список IDDCX_TARGET_MODE2 структур.

Эти расширенные режимы указывают возможные битовые глубины и форматы поверхности, которые можно использовать. Драйвер также может обновить список целевых режимов, вызвав IddCxMonitorUpdateModes2.

Ос вызывает различные варианты режимов HDR и WCG SDR на основе сведений, возвращаемых EVT_IDD_CX_ADAPTER_QUERY_TARGET_INFO обратного вызова драйвера перед любыми режимами.

ОС проверяет режимы, чтобы попытаться обнаружить повторяющиеся режимы, которые следует объединить и сообщить в виде одного режима. Например, целевой объект, поддерживающий 1080p в 60 Гц как в 8 битах, так и в 10 битах на канал, должен сообщаться как один режим. Однако если целевой объект поддерживает эти режимы, но они требуют различных объемов пропускной способности, они по-прежнему ок для передачи этих режимов отдельно.

Добавленный гамма-тип

Существующий EVT_IDD_CX_MONITOR_SET_GAMMA_RAMP DDI был расширен таким образом, что ОС может предоставить преобразование матрицы 3x4, необходимое для поддержки отображения HDR для драйверов, которые объявляют поддержку HDR.

Уровень белого уровня SDR

Данные пикселей курсора мыши всегда являются SDR. Если монитор установлен в режиме HDR, уровень белого уровня SDR должен применяться к курсорам мыши. IddCx v.10 предоставляет эту возможность в двух местах:

  • Он был добавлен в метаданные кадра, полученные драйвером при вызове IddCxSwapChainReleaseAndAcquireBuffer2.
  • Она также входит в представленную функцию IddCxMonitorQueryHardwareCursor3 , чтобы драйвер может отображать обновления курсоров на правильном уровне белого цвета без необходимости получения нового кадра. Белый уровень SDR по умолчанию составляет 80 нит.

Пространство цветов Surface

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

HDR с удаленными драйверами

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

  • Метаданные HDR не предоставляются удаленным драйверам. Ожидается, что клиентская система предоставит эти метаданные на основе физического подключенного дисплея. Это бессмысленно использовать метаданные, определенные сервером.
  • Преобразование цветовой матрицы 3x4 также не отправляется. Опять же, удаленный драйвер, как ожидается, будет использовать эквивалентные данные из клиентской системы.
  • Удаленные драйверы могут предоставлять данные цветовой метрии и белый уровень SDR, которые будут использоваться на сервере.
  • Режимы мониторинга также являются необязательными для удаленных драйверов. Если удаленный драйвер задает флаг адаптера IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE , ОС не запрашивает режимы мониторинга и вместо этого использует целевые режимы. Эта возможность позволяет драйверу указывать необычные режимы без необходимости сообщать о эквивалентном режиме мониторинга; Например, на основе размера окна клиента, а не размера монитора.

Поддержка уровня запуска драйвера 1.10

Для обеспечения совместимости драйверов версии 1.10, работающих в более ранних выпусках Windows, необходимо выполнить несколько действий. В частности, драйверы должны:

  • Продолжайте экспортировать все существующие функции, такие как EVT_IDD_CX_PARSE_MONITOR_DESCRIPTION, EVT_IDD_CX_MONITOR_QUERY_TARGET_MODES и EVT_IDD_CX_ADAPTER_COMMIT_MODES.
  • Используйте макрос IDD_CX_CLIENT_CONFIG_INIT, чтобы задать размер структуры IDD_CX_CLIENT_CONFIG.
  • Не пытайтесь вызывать функции, реализованные ОС, которые недоступны в более ранних выпусках. Используйте IDD_IS_FUNCTION_AVAILABLE для проверки доступности.
  • Ни одна из функций версии 1.10 не может быть экспортирована. Драйвер может использовать макрос IDD_IS_FIELD_AVAILABLE для проверки необходимости записи обратного вызова EvtIddCxXxx в структуру IDD_CX_CLIENT_CONFIG.
  • IDD_IS_FIELD_AVAILABLE также может помочь водителю определить, безопасно ли задать IDDCX_ADAPTER_FLAGS_CAN_PROCESS_FP16 или IDDCX_ADAPTER_FLAGS_ALL_TARGET_MODES_MONITOR_COMPATIBLE. Если один из DDIs версии 1.10 недоступен, драйвер не должен задать флаг.

Пример использования IDD_IS_FIELD_AVAILABLE :

    if (IDD_IS_FIELD_AVAILABLE(IDD_CX_CLIENT_CONFIG, EvtIddCxParseMonitorDescription2))
    {
        IddCxClientConfig.EvtIddCxParseMonitorDescription2 = ParseMonitorDescription2;
    }

Дополнительные сведения см. в разделе "Сборка драйверов IddCx 1.4".