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


Возможности WDDM 2.1

В этой статье содержатся сведения о функциях и усовершенствованиях модели драйвера Windows (WDDM) версии 2.1, которая доступна начиная с выпуска Windows 10 Anniversary Edition (Windows 10 версии 1607).

Сам WDDM 2.1 является необязательным. При реализации это коллекция обязательных и необязательных возможностей драйверов. Драйвер, поддерживающий любой из этих возможностей WDDM 2.1, должен поддерживать все обязательные. Тесты комплекта оборудования Windows (HLK) могут проверить поддержку, но Dxgkrnl проверяет согласованность в возможностях и DDIs.

Таблица требований WDDM 2.1

Функция Применимость
Улучшения предложения и восстановления Обязательно
Управление памятью видео Необязательно
Улучшения надежности защищенного содержимого HW Выбор оборудования
Поддержка приложений с помощью Windows GameDVR Обязательно
Непрямое отображение Выбор оборудования
Хранилище драйверов и параллельное установка Обязательно
Общий доступ к поверхности памяти DirectX для сценариев камеры и записи Обязательно

WDDM 2.1 поддерживает следующие версии D3D: D3D9, D3D10, D3D10.1, D3D11, D3D11.x, D3D12

Улучшения предложения и восстановления

Функция обратного вызова PFND3DDDI_RECLAIMALLOCATIONS3CB добавлена для уменьшения объема памяти приложений, работающих в фоновом режиме. Этот интерфейс позволяет приложениям предлагать ресурсы, приемлемые для полного вывода из эксплуатации при переходе в фоновом режиме. В результате диспетчер времени существования процесса может получить больше памяти из фоновых приложений, использующих DirectX, что приводит к меньшему количества завершения фонового приложения при давлении памяти.

Другие изменения DDI:

Дополнительные сведения о ресурсах предложения и восстановления см. в разделе "Предложение" и "Восстановление изменений".

Поддержка приложений с помощью Windows GameDVR

Юбилейный выпуск Windows 10 включает улучшенную возможность использования игровой панели Windows и GameDVR с полноэкранными играми.

Драйверы WDDM 2.1 требуются для поддержки функции производительности, называемой пакетной обработкой, которая добавляет поддержку многопотоковой поддержки переключения моделей переключения моделей. Эта важная функция гарантирует, что полноэкранные игры с игровой панелью выполняются на том же уровне производительности, что и в более ранних версиях Windows.

Для включения этой функции добавлены следующие DDIS:

Непрямое отображение

В WDDM 2.1 непрямое отображение позволяет дисплеям, подключенным к USB, участвовать во всех одинаковых пользовательских интерфейсах, как и в любом другом мониторе. Кроме того, драйвер косвенного отображения (IDD) является драйвером пользовательского режима, который проще разрабатывать, чем драйвер в режиме ядра, и в результате способствует повышению общей надежности системы.

В WDDM 2.1 включены следующие функции и возможности usb-дисплея:

  • При подключении USB-дисплея к платформе Windows или обновлению операционных систем соответствующие драйверы загружаются и устанавливаются из центра обновления Windows.

  • Подключение мониторов к оборудованию usb-дисплея будет обнаруживать и задавать правильную топологию монитора, разрешение и DPI.

  • Пользователи могут изменять разрешение монитора и масштабирование на мониторе.

  • Пользователи могут отключить USB-экраны и повторно подключить экраны без непредвиденных побочных эффектов.

  • Мониторинг топологии сохраняется через отключение и повторное подключение к одному монитору.

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

Дополнительные сведения о косвенном отображении см. в разделе "Обзор модели непрямого драйвера отображения"

Установка драйверов и параллельной установки драйверов

WDDM 2.1 представляет установку графических драйверов через хранилище драйверов. Этот механизм установки графических драйверов повышает устойчивость обновлений драйверов из Обновл. Windows. Это устраняет несоответствия версии файла драйвера, что приводит к нестабильности системы и перезагрузкам, инициированным пользователем. Каждое последующее обновление драйвера будет выполняться непосредственно из уникального расположения в хранилище драйверов (т. е.), System32\DriverStore\FileRepository\[…]что позволяет избежать перезаписи и несоответствий файлов драйверов.

Реализация функций хранилища драйверов требует изменений в INF-файле графического драйвера, чтобы убедиться, что файлы драйверов копируются в уникальный репозиторий драйверов. Изменения INF подробно описаны в требованиях к INF.

DXIL

WDDM 2.1 представляет переход стека компилятора шейдера GPU из Кода байтов DirectX (DXBC) на средний язык DirectX (DXIL), более новый формат для передачи инструкций шейдера в GPU. Переход на DXIL обеспечивает следующие преимущества разработчикам:

  • Программирования. Упрощение разработки улучшается, а сложность процесса создания шейдера снижается за счет минимизации различий между синтаксисом программирования GPU и языками ЦП, с которыми знакомы разработчики.

  • Компилятор с более высокой производительностью:

    • Производительность шейдера среды выполнения включена для повышения производительности.
    • DXIL предоставляет набор встроенных функций, позволяющих обмениваться данными по полосам процессоров SIMD в GPU.
  • Гибкость рабочего процесса — DXIL позволяет разработчикам управлять своими собственными пользовательскими средствами и оптимизацией, а также выбирать, какие шаги компиляции применяются во время сборки и во время выполнения.

  • Расширенные языковые функции— развивающийся язык предоставляет ключевые функции, которые устраняют различия между кодом GPU и кодом ЦП, а также сглаживают кривую обучения для программистов GPU.

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

Общий доступ к памяти DirectX для сценариев камеры и записи

В WDDM 2.1 компонент сервера кадров был представлен для совместного использования камеры или устройства захвата в нескольких процессах одновременно. Захваченные кадры можно сохранить в одном расположении памяти, из которое может считываться несколько приложений, в отличие от копирования данных изображения между процессами и совместными процессами. Эта функция обеспечивает более эффективное управление захваченными изображениями в нескольких процессах, экономии питания, уменьшении пропускной способности и уменьшении задержки для оборудования и драйверов, совместимых с WDDM 2.1. Конечные результаты — это повышение производительности для приложений и пользователей.

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

Кэширование и библиотека объектов состояния конвейера (PSO)

Объект состояния конвейера (PSO) — это интерфейс, представляющий инструкции и ресурсы графического конвейера (также известное как состояние) как унифицированный объект для уменьшения несоответствия между D3D и декомпозициями драйвера состояния. Для работы графически требовательных приложений и игр требуется создание большого количества PSOS. PSO появился в D3D12.

Библиотека PSO WDDM 2.1 и кэширование позволяют игровым приложениям хранить PSO в физическом хранилище после создания во время начального запуска. Эта возможность позволяет среде выполнения D3D извлекать предварительно созданные PSOS из библиотеки в будущих экземплярах, что снижает время извлечения PSO. Например, при первом запуске игры или после перезагрузки компьютера содержимое будет загружено из физической библиотеки в виде сохраненных PSOS.

Начало меток времени GPU конвейера

В WDDM 2.1 появилась возможность получения меток времени начала графических событий в конвейере GPU. Эта функция, используемая с окончанием меток времени конвейера, предоставляет разработчикам четкое и точное визуализацию параллелизации, конвейеризации и времени выполнения действий приложения на GPU. Разработчики могут дополнительно оптимизировать свой код и исследовать неэффективные проблемы с производительностью при предоставлении времени выполнения каждого события.

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

Просмотр микрокода GPU

WDDM 2.1 позволяет разработчикам оптимизировать свои шейдеры путем представления микрокода GPU. Разработчики программируют графический конвейер, создавая шейдеры на высокоуровневом языке шейдеров (HLSL), которые затем компилируются на промежуточный язык драйвера GPU. Драйвер выполняет дополнительные компиляции и оптимизации для преобразования этого кода в инструкции, относящиеся к GPU, которые остаются непрозрачными для разработчиков. С помощью этой функции разработчики предоставляют доступный для чтения код GPU для оценки степени оптимизации и скорости шейдера.

Эта функция позволяет драйверу пользовательского режима (UMD) комментировать каждый программируемый этап графического конвейера (шейдеры) и возвращать меры, доступные для использования или неправильного использования этих шейдеров программистом. Микрокод, зависящий от GPU, расчленен и представлен в удобочитаемом строковом формате вместе с комментариями UMD. Разработчики могут просматривать сопоставление кода HLSL с читаемым кодом GPU параллельно, что позволяет им динамически изменять код и просматривать результаты оптимизации компилятора на стороне кода GPU.

Определение версии WDDM

Крышки WDDM 2.1

Драйверы сообщают о поддержке WDDM 2.1 через DXGK_DRIVERCAPS::WDDMVersion с константой версии:

DXGK_WDDMVERSION::DXGKDDI_WDDMv2_1 = 0x2100

Dxgkrnl не использует крышку WDDMVersion в качестве способа определить, какие функции поддерживаются; эта задача остается на другие ограничения или присутствие DDI. Однако если драйвер сообщает о поддержке WDDM 2.1 через крышку WDDMVersion , Dxgkrnl проверяет наличие ограничений или DDIs, необходимых WDDM 2.1, и не удается создать адаптер, если они отсутствуют. Несогласованные ограничения приводят к сбою создания адаптера или сегмента.

Примечание.

Приложения, существующие или более новые, не должны запрашивать модель драйвера, чтобы воспользоваться всеми функциями Windows 10 Anniversary Edition, которые включены с помощью улучшений платформы, таких как описанные здесь. Любые изменения возможностей должны отображаться в соответствующей среде выполнения.

Для сопоставления KMT_DRIVERVERSION_WDDM_2_1 добавлена следующая константа:

typedef enum _DXGIDRIVERMODELVERSION
{
    DXGIDMVERSION_1_0            = 1000,
    DXGIDMVERSION_1_1_PRERELEASE = 1102,
    DXGIDMVERSION_1_1            = 1105, 
    DXGIDMVERSION_1_2            = 1200,
    DXGIDMVERSION_1_3            = 1300,
    DXGIDMVERSION_2_0            = 2000,
    DXGIDMVERSION_2_1            = 2100,

} DXGIDRIVERMODELVERSION;

Версии интерфейса DDI в драйвере режима ядра (KMD) приведены следующим образом:

#define DXGKDDI_INTERFACE_VERSION_VISTA      0x1052
#define DXGKDDI_INTERFACE_VERSION_VISTA_SP1  0x1053
#define DXGKDDI_INTERFACE_VERSION_WIN7       0x2005
#define DXGKDDI_INTERFACE_VERSION_WIN8       0x300E
#define DXGKDDI_INTERFACE_VERSION_WDDM1_3    0x4002
#define DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION  0x4003
#define DXGKDDI_INTERFACE_VERSION_WDDM2_0    0x5023
#define DXGKDDI_INTERFACE_VERSION_WDDM2_1    0x6002

Требования к графическим INF

Графические драйверы WDDM 2.1 имеют разные требования к INF по сравнению с драйверами WDDM 2.0 или предыдущими драйверами:

  1. WDDM 2.1 должен иметь идентичную оценку компонентов, как графический драйвер WDDM 2.0 (D1).

  2. Графические драйверы WDDM 2.1 должны использовать другой раздел установки INF ОС.

  3. WDDM 2.1 графический драйвер INF изменится на установку Driver Store.

Дополнительные сведения см. в разделах и директивах INF-файла.

32-разрядные и 64-разрядные файлы драйверов останутся и загружаются из хранилища драйверов. Перенаправление файловой системы WoW64 не применяется к хранилищу драйверов. IHVs может указывать вложенные папки с помощью стандартного синтаксиса INF для создания, например папки WoW64 в уникальной папке хранилища драйверов, если это необходимо.

В следующем примере показано, как inf-поддержка запуска из хранилища драйверов отличается от предыдущего поведения.

WINDOWS 10 ANNIVERSARY EDITION APPROACH: RUNNING DRIVERS FROM THE DRIVER STORE
[DestinationDirs]
KMDCopyFiles = 13
UMDCopyFiles = 13
UMDWoW64CopyFiles = 13

[DDInstall]
CopyFiles=KMDCopyFiles
CopyFiles=UMDCopyFiles
CopyFiles=UMDWoW64CopyFile

[KMDCopyFiles]
myKMD.sys

[UMDCopyFiles]
myUMD64.dll
myOpenCL64.dll
myOpenGL64.dll

[UMDWow64CopyFiles]
myUMD32.dll
myOpenCL32.dll
myOpenGL32.dll

[DDInstall.Services]
AddService = serviceName, 0x00000002, serviceName_Service_Inst

[serviceName_Service_Inst]
ServiceBinary = %13%\serviceName.sys

[regAdd]
HKR,,UserModeDriverName,%REG_MULTI_SZ%,%13%\myUMD64.dll, %13%\myUMD64.dll, %13%\myUMD64.dll, %13%\myUMD64.dll
HKR,,UserModeDriverNameWoW,%REG_MULTI_SZ%, %13%\myUMD32.dll, %13%\myUMD32.dll, %13%\myUMD32.dll, %13%\myUMD32.dll
HKLM,"Software\Khronos\OpenCL\Vendors",%13%\myOpenCL64.dll,%REG_DWORD%,0x00000000
HKLM,"Software\Wow6432Node\Khronos\OpenCL\Vendors",%13%\ myOpenCL32.dll,%REG_DWORD%,0x00000000
HKR,,OpenGLDriverName,%REG_MULTI_SZ%,%13%\myOpenGL64.dll
HKR,,OpenGLDriverNameWoW,%REG_MULTI_SZ%,%13%\myOpenGL32.dll

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

...
[DestinationDirs]
...
UMDWoW64CopyFiles = 13,WoW64
...
[regAdd]
...
HRK,, UserModeDriverNameWoW,%REG_MULTI_SZ%, %13%\WoW64\myUMD.dll, %13%\WoW64\myUMD.dll, %13%\

The manufacturer install section decoration for Windows 10 Anniversary edition WDDM 2.1 drivers is as follows: 
...
[Manufacturer]
%Grfx_Manf% =  IHVGfx, NTamd64.10.0…14310
...
[IHVGfx.NTamd64.10.0…14310]
; HW ID list
[list of HW IDs]

Управление версиями драйверов

Библиотеки DLL драйвера и файлы SYS для графического адаптера или набора микросхем должны иметь правильную отформатированную версию файла.

Файл сведений о драйвере (.inf), драйвер в режиме ядра (.sys) и сведения о версии файла в режиме пользователя (.dll) должны соответствовать. Кроме того, сведения о версии для всех файлов, определенных в [SignatureAttributes] разделе INF как двоичные файлы PETrust, должны соответствовать INF.inf. Рекомендуется, чтобы сведения о версии файла для дополнительных двоичных файлов в пакете драйвера соответствовали INF.

Чтобы соответствовать существующим требованиям к версиям файлов для устаревших операционных систем, форматирование версий файлов должно соответствовать шаблону AA.BB.CCCCC.DDDDD :

  • AA указывает версию модели драйвера наиболее эффективного устройства, указанного в INF-файле.

  • BB (для драйверов WDDM 1.2 и выше) указывает самый высокий доступный уровень компонентов D3D для наиболее способных устройств, перечисленных в inf.inf

  • BB (для драйверов WDDM 1.1 и ниже) указывает максимальную доступную версию DDI, поддерживаемую наиболее способным устройством, перечисленным в inf.inf

  • CCCCC — это число до пяти цифр от 0 до 65535, выбранных поставщиком

  • DDDDDD — это число до пяти цифр от 0 до 65535, выбранных поставщиком.

Значения поля AA:

Модель драйвера Значение AA
WDDM версии 2.1 21
WDDM версии 2.0 20
WDDM версии 1.3 10
WDDM версии 1.2 9
WDDM версии 1.1 8
WDDM версии 1.0 7
XDDM 6

Значения для поля BB (WDDM 1.2 и более поздних версий):

Уровень компонентов DirectX Значение BB
12_x 21
12_1 20
12_0 19
11_1 18
11_0 17
10_1 16
10_0 15
9_3 14
9_2 14
9_1 14

Значения для поля BB (WDDM 1.1 и более ранних версий):

Версия DDI Значение BB
D3D11-DDI на уровне компонентов 11_0 17
D3D11-DDI на уровне компонентов 10 16
D3D10-DDI 15
D3D9 DDI 14

Примеры

Примечание.

Для полей CCCCC или DDDDDD не требуется представлять номера панели с начальными нулями, т. е. 123 не требуется представлять как 00123. В предыдущих версиях ОС Windows последние два поля были 4 цифрами, т. е. CCCC.DDDDD. Поэтому в примерах версий драйверов до Windows 10 и WDDM 2.0 есть только 4 цифры.

  • Windows Vista WDDM 1.0:

    • Драйверы DDI DDI могут использовать 7.14.0000.0000 до 7.14.9999.9999
    • Драйверы DDI d3D10 могут использовать 7.15.0000.0000 до 7.15.9999.9999
  • Windows 7 WDDM 1.1:

    • Драйверы DDI DDI могут использовать 8.14.0000.0000 до 8.14.9999.9999
    • Драйверы DDI d3D10 могут использовать 8.15.0000.0000 до 8.15.9999.9999
    • DDI D3D11 с драйверами FL_10_0 может использовать 8.16.0000.0000 до 8.16.9999.99999
    • DDI D3D11 с драйверами FL_11_0 может использовать 8.17.00000.0000 до 8.17.9999.9999
  • Windows 8 WDDM 1.2:

    • FL_10_0 HW может использовать 9.15.0000.0000 до 9.15.9999.9999
    • FL_10_1 HW может использовать 9.16.0000.0000 до 9.16.9999.9999
    • FL_11_0 HW может использовать 9.17.0000.0000 до 9.17.9999.9999
    • FL_11_1 HW может использовать 9.18.0000.0000 до 9.18.9999.9999
  • Windows 8.1 WDDM 1.3:

    • FL_10_0 HW может использовать 10.15.0000.0000 до 10.15.9999.9999
    • FL_10_1 HW может использовать 10.16.0000.0000 до 10.16.9999.9999
    • FL_11_0 HW может использовать 10.17.0000.0000 до 10.17.9999.9999
    • FL_11_1 HW может использовать 10.18.0000.0000 до 10.18.9999.9999
  • Windows 10 WDDM 2.0:

    • FL_11_1 HW может использовать 20.18.0000.0000 до 20.18.65535.65535
    • FL_12_0 HW может использовать 20.19.0000.0000 до 20.19.65535.65535
    • FL_12_1 HW может использовать 20.20.0000.0000 до 20.20.65535.65535
  • Windows 10 WDDM 2.1:

    • FL_11_1 HW может использовать 20.18.0000.0000 до 21.18.65535.65535
    • FL_12_0 HW может использовать 20.19.0000.0000 до 21.19.65535.65535
    • FL_12_1 HW может использовать 20.20.0000.0000 до 21.20.65535.65535

Принудительное исполнение

Обязательный тест в списке воспроизведения сертификатов HLK для сборок Windows 10 выше 10586 применяет правила, указанные в этой статье. Тест необязателен для более старых версий ОС. Для сборок Windows 10 после 10586 версия WDDM была обновлена до версии 2.1. Другой способ просмотра заключается в том, что обязательное требование применяется только к драйверам, созданным для WDDM 2.1 или более поздней версии.