Руководство по расширенной платформе растеризации Windows (WARP)

В этой статье описывается платформа расширенной растеризации Windows (WARP) и следующие аспекты WARP.

Что такое WARP?

WARP — это высокоскоростный, полностью соответствующий программный растризатор. Это компонент графической технологии DirectX, которая была представлена средой выполнения Direct3D 11. Среда выполнения Direct3D 11 устанавливается в Windows 7, Windows Server 2008 R2 и Windows Vista с обновлением [КБ971644]. Windows 8, Windows 10, Windows Server 2012 и выше и Windows RT включают среду выполнения Direct3D 11.1, которая имеет обновленную версию WARP. Windows 10 Fall Creators Update (1709) включает версию WARP, которая поддерживает среды выполнения Direct3D 11 и Direct3D 12.

Преимущества WARP

WARP предоставляет следующие преимущества:

Удаление необходимости пользовательских растризаторов программного обеспечения

WARP упрощает разработку, удаляя необходимость создания пользовательского растеризатора программного обеспечения и настройки приложения для него вместо настройки приложения для оборудования. Предоставляя один программный растризатор общего назначения, вам больше не нужно писать алгоритмы отрисовки изображений несколькими способами для запуска на оборудовании или программном обеспечении с различными функциями и возможностями. Алгоритмы по-прежнему можно реализовать несколькими способами для повышения производительности или масштабирования; однако вам не нужно изменять API или архитектуру отрисовки, которая используется для реализации этих алгоритмов. Вместо этого вы можете сосредоточиться на создании большого приложения Direct3D 10 или более поздней версии, которое будет выглядеть одинаково и хорошо работать на оборудовании или в программном обеспечении.

Включение максимальной производительности из графического оборудования

Когда приложение настроено на эффективное выполнение на оборудовании, оно будет эффективно работать в WARP, а также. Обратное также верно; любое приложение, настроенное на запуск в WARP, будет хорошо работать на оборудовании. Приложения, использующие Direct3D 10 и более поздних версий, неэффективно могут эффективно масштабироваться на другом оборудовании. WARP имеет аналогичные профили производительности для оборудования, поэтому настройка приложения для больших пакетов, минимизация изменений состояния, удаление точек синхронизации или блокировок поможет как оборудованию, так и WARP.

Включение отрисовки при недоступности оборудования Direct3D

WARP обеспечивает быструю отрисовку в различных ситуациях, когда аппаратные реализации нежелательны или недоступны, в том числе:

  • Если у пользователя нет оборудования с поддержкой Direct3D
  • Когда приложение выполняется как услуга или в серверной среде
  • Если приложение хочет зарезервировать аппаратные ресурсы Direct3D для других использования
  • Если видео карта не установлено
  • Если видеодрайв недоступен или не работает правильно
  • Когда видео карта не хватает памяти, зависает или занимает слишком много системных ресурсов для инициализации

Использование существующих ресурсов для отрисовки программного обеспечения

Существует огромное сообщество, многие книги, веб-сайты, пакеты SDK, примеры, белые документы, списки рассылки и другие ресурсы, которые помогут вам воспользоваться преимуществами отрисовки изображений на основе шейдера Direct3D 10 и более поздних версий. С помощью WARP в качестве резервного программного обеспечения можно использовать существующие знания о оборудовании для повышения производительности приложения при запуске с оборудованием или программным обеспечением. Кроме того, многие отличные инструменты от поставщиков графических карта и в пакете SDK DirectX помогут вам разрабатывать, создавать, разрабатывать, отлаживать и анализировать проблемы производительности графических приложений. Эти средства и знания теперь могут воспользоваться преимуществами разработки приложений, предназначенных как для оборудования, так и программного обеспечения при использовании WARP.

Включение сценариев, которые не требуют графического оборудования

Различные алгоритмы и приложения (алгоритмы обработки изображений, печать, удаленное взаимодействие, виртуальные компьютеры и другие эмуляторы, высококачественная отрисовка шрифтов, диаграммы и т. д.) обычно оптимизированы для ЦП, так как они не зависят от оборудования. С помощью WARP можно использовать одну архитектуру, которая выполняет эти алгоритмы и приложения, а также полностью работает в программном обеспечении; тем не менее, если аппаратное ускорение доступно, вы можете воспользоваться его преимуществами.

Завершение работы с платформой графики DirectX

WARP позволяет получить доступ ко всем графическим функциям Direct3D 10 и более поздних версий даже на компьютерах без графического оборудования Direct3D 10 и более поздних версий. Удаленные биты возможностей Direct3D 10 (caps); То есть вам больше не нужно проверять, доступны ли графические возможности из графического оборудования, так как Direct3D 10 и более поздних версий гарантирует эту доступность. Теперь вы можете использовать все функции широкого спектра видео карта, зная, что их приложение будет вести себя и выглядеть одинаково везде. Вы можете масштабировать производительность этих приложений, просто отключив дорогостоящие графические функции на низком уровне видео карта или отрисовку до небольших целевых объектов.

Возможности и требования WARP

WARP полностью поддерживает все функции Direct3D 10 и 10.1. Например, WARP поддерживает следующие наиболее важные функции:

  • Все требования точности спецификации Direct3D 10 и 10.1
  • Direct3D 11 при использовании с уровнями компонентов 9_1, 9_2, 9_3, 10_0 и 10_1 (дополнительные сведения об уровнях функций см. в D3D_FEATURE_LEVEL)
  • Все необязательные форматы текстур, такие как многофакторная отрисовка и выборка из плавающей поверхности
  • Антиалиасный, высококачественный отрисовка до 8x многосамплийная защита (MSAA)
  • Анисотропная фильтрация
  • 32-разрядные и 64-разрядные приложения и 32-разрядные приложения с большим адресом

При установке обновления платформы для Windows 7 в Windows 7 с пакетом обновления 1 (SP1) или Windows Server 2008 R2 с пакетом обновления 1 (SP1) эта операционная система включает среду выполнения Direct3D 11.1 и версию WARP, которая поддерживает Direct3D 11.x при использовании с уровнями компонентов 9_1, 9_2, 9_3, 10_0, 10_1 и 11_0.

Windows 8, Windows 10, Windows Server 2012 и выше и Windows RT включают среду выполнения Direct3D 11.1 и новую версию WARP. Эта версия поддерживает Direct3D 11.x при использовании с уровнями компонентов 9_1, 9_2, 9_3, 10_0, 10_1, 11_0 и 11_1.

Windows 10 Fall Creators Update (1709) включает новую версию WARP, которая поддерживает уровни компонентов Direct3D 12 12 _0 и 12_1.

Минимальные требования к компьютеру для WARP совпадают с требованиями к Windows Vista, в частности:

  • Минимум 800 МГц ЦП
  • MMX, SSE или SSE2 не требуется
  • Минимум 512 МБ ОЗУ

Использование WARP

Для Direct3D 12 создание устройства WARP требует сначала идентификации адаптера WARP. Чтобы упростить эту задачу, DXGI 1.4 предоставляет метод IDXGIFactory4::EnumWarpAdapter. Затем адаптер WARP можно предоставить D3D12CreateDevice для создания устройства WARP.

Компоненты Direct3D 10, 10.1 и 11 могут использовать дополнительный тип драйвера, который можно указать при создании устройства (например, при вызове функции D3D11CreateDevice ). Этот тип драйвера D3D10_DRIVER_TYPE_WARP или D3D_DRIVER_TYPE_WARP. При указании этого типа драйвера среда выполнения создает устройство WARP и не инициализирует аппаратное устройство.

Так как WARP использует тот же программный интерфейс для Direct3D, что и эталонный растризатор, любое приложение Direct3D, которое может поддерживать выполнение с помощью эталонного растризатора, можно протестировать с помощью WARP. Чтобы использовать WARP, переименуйте D3d10warp.dll в D3d10ref.dll и поместите его в ту же папку, что и пример или приложение. Затем при переключении на ссылку вы увидите отрисовку WARP.

Если переименовать WARP в D3d10ref.dll и поместить его в C:\Program Files (x86)\Microsoft DirectX SDK (июнь 2010 г.)\Samples\C++\Direct3D\Bin\x86, можно запустить все примеры DirectX для WARP, нажав кнопку "Переключить ссылку" в образце или выполнив пример с параметром /ref, указанным в командной строке.

Все приложения, которые могут использовать Direct3D, могут использовать WARP. Сюда входят следующие типы приложений:

Случайные игры

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

Существующие неигровые приложения

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

Расширенные игры отрисовки

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

Другие приложения

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

Архитектура и производительность WARP

WARP основан на базе кода растризатора ссылок. Поэтому WARP использует один и тот же программный интерфейс для Direct3D 10 и более поздних версий и DXGI. WARP входит в Windows 7 в библиотеку D3d10warp.dll, расположенную в папках систем Windows. Две версии WARP устанавливаются на 64-разрядных компьютерах, версии x86 и x64. Версия x64 может выполняться быстрее в определенных обстоятельствах, так как генератор кода, содержащийся в WARP, может воспользоваться дополнительными регистрами, доступными при запуске 64-разрядных приложений.

WARP содержит следующие два высокоскоростных компилятора в режиме реального времени:

  • Высокоуровневый компилятор промежуточного языка, который преобразует байт-код HLSL и текущее состояние отрисовки в оптимизированный поток векторных команд для геометрического шейдера (GS), вершинного шейдера (VS) и шейдера пикселей (PS) конвейера.
  • Генератор высокопроизводительных JIT-кода, который может принимать эти команды и создавать оптимизированный код сборки SSE2, SSE4.1, x86, x64, arm и arm64.

WARP использует пул потоков и комплексное управление задачами и отслеживание зависимостей, появившиеся в Windows Vista, чтобы обеспечить эффективное распределение всех частей конвейера отрисовки между доступными ядрами ЦП.

WARP использует отложенную отрисовку. То есть WARP может выполнять пакетную отрисовку команд, что позволяет выполнять растеризацию только в том случае, если достаточно данных для эффективного использования всех ресурсов ЦП. Работа с основным потоком приложения сводится к минимуму, чтобы позволить приложению отправлять команды как можно быстрее. Если приложение также многопоточное и использует пул потоков, работа будет равномерно распределена между WARP и приложением.

Генератор кода WARP был настроен для оптимального использования современной архитектуры ЦП. WARP работает на всех компьютерах, которые могут запускать Windows Vista и более поздние операционные системы, даже если компьютер не поддерживает SSE. Однако WARP оптимизирован для компьютеров, поддерживающих SSE2. Он также содержит оптимизацию для конкретных архитектур процессоров AMD и Intel, а также поддержку расширений SSE 4.1.

ДЛЯ ВЫПОЛНЕНИЯ WARP не требуется графическое оборудование. Он может выполняться даже в ситуациях, когда оборудование недоступно или не может быть инициализировано.

Приложения и примеры, разработанные и созданные для запуска на оборудовании Direct3D 10 и более поздних версий без каких-либо знаний о WARP, скорее всего, будут работать хорошо с помощью WARP. Однако рекомендуется снизить параметры качества и разрешение как можно больше, чтобы достичь доступных частот кадров. Вы можете использовать WARP для разработки и настройки приложений, которые хорошо работают как на оборудовании, так и в программном обеспечении.

Так как WARP использует несколько ядер ЦП для параллельного выполнения, он лучше всего работает на современных многоядерных ЦП. WARP также работает значительно быстрее на компьютерах с установленными расширениями SSE4.1. Корпорация Майкрософт выполнила значительное тестирование и настройку производительности на компьютерах с восемью или более ядрами и SSE4.1, так как эти высокопроизводительные компьютеры становятся более распространенными в течение всего времени существования операционных систем Windows 7 и более поздних версий.

При запуске WARP на ЦП оно ограничено по сравнению с графическим карта несколькими способами. Скорость передней шины ЦП обычно составляет около 10 ГБ/с. В отличие от этого, графический карта часто имеет выделенную память, которая использует от 20 до 100 ГБ/с или более пропускной способности графики. Графическое оборудование также имеет блоки фиксированной функции, которые могут выполнять сложные и дорогостоящие задачи, такие как фильтрация текстур, распаковка формата или преобразования, асинхронно с небольшими затратами или затратами на питание. Выполнение этих операций на типичном ЦП является дорогостоящим с точки зрения потребления энергии и циклов производительности.

Типичные номера производительности для компьютера Intel Penryn на основе 3,0GHz Quad Core показывают, что WARP может в некоторых случаях выходить за низкоуровневые интегрированные графические процессоры Direct3D 10 и более поздних графических процессоров на ряде тестов. Низкоуровневое дискретное графическое оборудование обычно 4–5 раз быстрее, чем WARP при выполнении этих тестов. Эти низкоуровневые интегрированные или дискретные GPU имеют минимальное использование ресурсов ЦП. Средний или высокоуровневый графический карта значительно быстрее, чем WARP для многих приложений, особенно если приложение может воспользоваться преимуществами параллелизма и пропускной способности памяти, предоставляемых этими графическими карта.

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

В следующих двух таблицах показаны примеры данных WARP с различными ЦП и графическими карта.

В первой таблице показаны примеры данных WARP с Direct3D 10 Crysis, выполняющихся на уровне 800x600 со всеми параметрами качества на самых низких уровнях:

ЦП Время Ave FPS Минимальное количество FPS Min Frame Максимальное число FPS Максимальное число кадров
Core i7 8 Core @ 3,0GHz 271.57 7.36 3,46 1966 15,01 995
Penryn 4 Core @ 3,0GHz 351.35 5,69 2,49 1967 10.95 980
Penryn 2 Core @ 3,0GHz 573.98 3.48 1,35 1964 6,61 988
Core 2 Duo @ 2,6 ГГц 707.19 2,83 0,81 1959 5.18 982
Core 2 Duo @ 2,4 ГГц 763.25 2.62 0.76 1964 4,70 984
Core 2 Duo @ 2,1 ГГц 908.87 2,20 0,64 1965 3,72 986
Xeon 8 Core @ 2,0GГц 424.04 4.72 1.84 1967 9,56 988
AMD FX74 4 Core @ 3,0GГц 583.12 3.43 1,41 1967 5.78 986
Phenom 9550 4 Core @ 2,2GHz 664.69 3,01 0.53 1959 5.46 987

Вторая таблица показывает примеры данных, выполняющих один и тот же тест в различных графических карта:

Видеокарты Время Ave FPS Минимальное количество FPS Min Frame Максимальное число FPS Максимальное число кадров
NVIDIA 8800 GTS 23.58 84,80 60.78 1957 130.83 1022
NVIDIA 8500 GT 47.63 41.99 25.67 1986 72.57 991
NVIDIA Quadro 290 67.16 29.78 18.19 1969 49.87 1017
NVIDIA 8400 GS 59.01 33.89 21,22 1962 51.82 1021
ATI 3400 53.79 37.18 22,97 618 59.77 1021
ATI 3200 67.19 29.77 18.91 1963 45.74 980
ATI 2400 PRO 67.04 29.83 17.97 606 45.91 987
Интегрированная технология Intel DX10 386.94 5.17 1.74 1974 16.22 995

Соответствие WARP

WARP передает все стандартные тесты соответствия Оборудования Windows (WHQL) для проверки аппаратных устройств Direct3D.

WARP был протестирован для набора приложений и тестов Direct3D 10.1 и Direct3D 10.1, а также для примеров SDK из DirectX, NVIDIA и AMD.

WARP использовал средство отладки и анализа PIX для Windows в его тестировании; Корпорация Майкрософт имеет большую библиотеку однокадровых записей приложений, которые используются для сравнения между оборудованием и WARP. Большинство изображений почти идентичны между оборудованием и WARP; где иногда возникают небольшие различия, они находятся в пределах допустимых ограничений, определенных спецификацией Direct3D 10.