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


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

Это важно

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

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

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

  • Обновите версию IddCxGetVersion (консоль и удаленный доступ). Полный список сведений о версиях, связанных с IddCx, см. в разделе Версии IddCx.
  • Добавьте возможность запрашивать поддержку функций ОС.
  • Добавьте поддержку использования API D3D12.
  • Добавьте новую атомарную операцию чтения/записи для I2C DDI.
  • Добавьте поддержку только дескрипторов DisplayID.
  • Добавьте поддержку обновления счетчика перекодирования статического десктопа.

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

Значение, возвращаемое IddCxGetVersion , было обновлено для возврата 0x1B00.

Запрос поддержки функций ОС

Теперь драйверы имеют возможность определить, доступна ли определенная функция IddCx 1.11 в базовой ОС путем вызова IddCxCheckOsFeatureSupport. Несколько версий ОС могут сообщать о поддержке IddCx 1.11 через IddCxGetVersion, но, возможно, будут доступны только некоторые функции.

Поддержка D3D12

Драйверы IddCx 1.11, поддерживающие D3D12, могут связывать объект ID3D12Device с цепочкой буферов и получать объекты ID3D12Resource с помощью вызовов IddCxSwapChainReleaseAndAcquireBuffer2. Общие сведения о связанных изменениях приведены в следующих разделах.

Связывание устройства D3D12 со swapchain

Если драйвер хочет получать кадры D3D12, необходимо предоставить объект ID3D12Device в вызове IddCxSwapChainSetDevice2.

Получение кадров D3D12

После того как драйвер вызвал IddCxSwapChainSetDevice2 и предоставил объект ID3D12Device, объект IDARG_OUT_RELEASEANDACQUIREBUFFER2, переданный при вызове IddCxSwapChainReleaseAndAcquireBuffer2, будет иметь установленным флаг IDDCX_METADATA2_VALID_FLAGS_D3D12SURFACE. После этого драйвер должен использовать IDARG_OUT_RELEASEANDACQUIREBUFFER2.MetaData.pD3d12Surface для доступа к пиксельным данным.

Синхронизация доступа к поверхностям D3D12

Значительное изменение при использовании драйвера D3D12 — это модель синхронизации, которая управляет доступом к поверхностям цепочки буферов для предотвращения таких проблем, как блокировка и доступ к устаревшим пиксельным данным. Благодаря более детализированному управлению, которое предоставляет D3D12, драйверы должны явно сообщить операционной системе, какая очередь команд будет использовать поверхность в качестве входных данных.

Дополнительные сведения о обязанностях водителя по синхронизации приведены в IDDCX_METADATA2 примечаниях.

Поддержка атомарного I2C

Драйвер версии 1.11, который поддерживает I2C, предоставляя DDI EVT_IDD_CX_MONITOR_I2C_RECEIVE и EVT_IDD_CX_MONITOR_I2C_TRANSMIT, также должен предоставлять EVT_IDD_CX_MONITOR_I2C_TRANSMIT_AND_RECEIVE. Этот новый DDI выполняет операцию I2C в одном вызове, чтобы помочь драйверам, выполняющим собственные операции I2C, не пересекаясь с вызовами ОС.

Замечание

Драйверы, предоставляющие новый DDI, не должны предполагать, что существующие DDIS больше не будут использоваться.

Поддержка только дескриптора DisplayID

Новый тип дескриптора, IDDCX_MONITOR_DESCRIPTION_TYPE_DISPLAYID, добавлен в перечисление IDDCX_MONITOR_DESCRIPTION_TYPE, используемое в аргументах, передаваемых в IddCxMonitorCreate и IddCxMonitorCreate2. Это следует использовать, если предоставленный дескриптор содержит только дескриптор DisplayID и не блоки EDID вообще.

Обновление счетчика перекодирования статического рабочего стола

В настоящее время количество повторных кодировок статического рабочего стола указывается при создании адаптера. Теперь новый DDI позволяет обновить это значение в цепочке буферов после создания адаптера.

Поддержка выполнения драйвера версии 1.11 на более низких уровнях системы

Если драйвер версии 1.11 должен работать в более ранних выпусках Windows, необходимо выполнить действия для обеспечения совместимости.

  • Драйвер должен задать размер структуры IDD_CX_CLIENT_CONFIG с помощью макроса IDD_CX_CLIENT_CONFIG_INIT .
  • Драйвер не должен устанавливать новые флаги, добавленные в IDDCX_ADAPTER_FLAGS.
  • Драйвер не должен пытаться вызывать новые функции, предоставляемые ОС, так как они недоступны. IDD_IS_FUNCTION_AVAILABLE можно использовать для проверки.
  • Ни одна из новых функций не может быть экспортирована. Драйверы могут использовать макрос IDD_IS_FIELD_AVAILABLE для проверки необходимости записи обратного вызова EvtIddXxx в структуру IDD_CX_CLIENT_CONFIG .
  • Даже если ОС возвращает 0x1B00 из вызова IddCxGetVersion, драйвер должен запрашивать поддержку определенных функций путем вызова IddCxCheckOsFeatureSupport.

В следующем примере показано, как можно использовать IDD_IS_FIELD_AVAILABLE :

if (IDD_IS_FIELD_AVAILABLE(IDD_CX_CLIENT_CONFIG, EvtIddCxMonitorI2CTransmitAndReceive))
{
    IddCxClientConfig.EvtIddCxMonitorI2CTransmitAndReceive = MonitorI2CTransmitAndReceive;
}

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

Какие функции используются

Функция IddCx 1.11 Вызовы новых функций ОС для адаптеров версии 1.11 Предыдущий эквивалент
Атомарный I2C EVT_IDD_CX_MONITOR_I2C_TRANSMIT_AND_RECEIVE EVT_IDD_CX_MONITOR_I2C_TRANSMIT и EVT_IDD_CX_MONITOR_I2C_RECEIVE
Функция IddCx 1.11 Новые функции, которые драйвер должен вызывать Предыдущий эквивалент
D3D12 IddCxSwapChainSetDevice2 IddCxSwapChainSetDevice
Обновление счетчика перекодировок IddCxSwapChainUpdateStaticDesktopReencodeFrameCount N/A

Предыдущие выпуски

Сведения об изменениях в более ранних версиях IddCx см. в следующих статьях: