Аппаратное ускорение во всех областях: графика Windows 8
🕛 01.08.2012, 06:03
При разработке Windows 8 мы поставили цель быстрого отображения привлекательной графики высокого качества с использованием современного графического оборудования всеми приложениями. Эта работа основана на устойчивых принципах технологии DirectX, предоставляющей все больше интерфейсов API и различных возможностей. В Windows 7 мы расширили возможности DirectX, чтобы предоставить общую графическую платформу с аппаратным ускорением для более широкого спектра приложений. Ранее технология DirectX в основном использовалась для предоставления трехмерной графики, а теперь мы добавили функции для так называемой "основной" графики. Основная графика играет важную роль в типичных классических приложениях, используемых большинством людей каждый день. К ним относятся браузеры, почтовые клиенты, календари и офисные приложения. В Windows 7 добавлены два новых компонента DirectX: Direct2D для двухмерной графики (фигуры, точечные рисунки и т. д.) и DirectWrite для обработки текста. Оба этих дополнения фокусируются не только на производительности, но и на высококачественной отрисовке 2D-графики. Эти добавления сделали DirectX графической платформой с аппаратным ускорением для всех типов приложений. Мы показали, чего может достичь обычное приложение благодаря использованию DirectX, когда аппаратное ускорение графики стало использоваться в Internet Explorer 9 при просмотре веб-сайтов. WinRT предоставляет эти возможности для всех новых приложений для Windows 8. В этой записи блога, автором которой является Роб Коупленд (Rob Copeland), руководитель программы в группе по графике, рассматриваются подробности реализации этого нового класса графических приложений. -- Стивен В компьютерной графике высокая производительность является основным принципом. На ранних этапах развития персональных компьютеров отдельные дополнительные графические платы предназначались в основном для специализированных приложений, таких как САПР и АСТПП, и игр. Даже тогда уже существовало мнение о том, что графические мощности можно было бы использовать для улучшения пользовательского интерфейса и работы пользователей. Одна из первых графических плат для ПК от компании S3 Graphics называлась Windows Accelerator. Она использовалась для отображения пользовательского интерфейса и быстрее перемещала окна по экрану. По мере развития графического оборудования эволюционировали и методы, используемые разработчиками для взаимодействия с этим оборудованием.
DirectX является компонентом Windows, который предоставляет общий интерфейс API, позволяющий разработчикам использовать графическое оборудование компьютера для отрисовки текста, фигур и трехмерных сцен, а также для отображения их на экране. Возможности и производительность DirectX также развивались со временем. На ранних этапах платформа DirectX использовалась в основном для игр. По мере развития приложений и создания более графически насыщенного интерфейса многие из них стали использовать DirectX для улучшения производительности и внешнего вида. Работа над Windows 8
Начиная планировать работу над графикой в Windows 8, мы знали, что собираемся создать новый, визуально насыщенный способ взаимодействия пользователей с приложениями и самой операционной системой Windows. Мы также знали, что будем разрабатывать новую платформу для создания приложений в стиле Metro и будем ориентироваться на более широкий спектр оборудования. И хотя у нас была основа в виде прекрасной графической платформы, для выполнения поставленных задач требовалось много усилий. Мы сформулировали четыре основные цели: гарантировать, что все особенности стиля Metro отображаются плавно и быстро; предоставить платформу с аппаратным ускорением для всех приложений в стиле Metro; добавить новые возможности в DirectX, позволяющие создавать великолепные визуальные эффекты; поддерживать широчайший спектр графического оборудования.
Хотя каждая из этих целей фокусируется на различных аспектах разработки Windows 8, все они зависят от производительности и возможностей графической платформы. Планирование производительности
Производительность графики в Windows зависит от операционной системы и аппаратной системы, состоящей из центрального процессора, графического процессора и связанного видеодрайвера. Чтобы обеспечить хорошую производительность для новых приложений в стиле Metro, нам требовалось убедиться, что и программная платформа, и аппаратная система смогут добиться отличной производительности.
В прошлом мы использовали множество различных тестов и приложений для измерения производительности DirectX. По большей части они фокусировались на трехмерных играх. Хотя игры по-прежнему очень важны, мы знали, что многие из этих методов измерения графической производительности не давали нам всей необходимой информации для основных двухмерных приложений с насыщенной графикой.
Поэтому мы создали новые тесты и показатели для отслеживания нашего прогресса. Мы используем следующие показатели: 1. Частота кадров
Частота кадров выражается в кадрах в секунду (кадров/с). Этот показатель широко используется для игровых тестов и одинаково важен для видеоконтента и других приложений. Когда на экране отображается анимация, частота 60 кадров/с позволяет добиться плавного изображения. Мы нацеливаемся на эту частоту, так как большинство компьютерных мониторов обновляются с частотой 60 Гц. С этой частотой кадров Windows может воспроизводить очень плавную анимацию при использовании сенсорного управления. 2. Число сбоев
Частота кадров — важный показатель, однако он не дает всей информации. Например, если при выполнении теста в течение 10 минут средняя частота кадров составляет 60 кадров/с, то это кажется идеальным результатом. Но это не говорит нам о том, насколько сильно частота кадров могла снижаться во время теста. Например, если частота кадров падает до 10 кадров/c в сложные моменты, анимация будет "сбиваться". Показатель числа сбоев учитывает общее число случаев, когда на отрисовку ушло более 1/60 секунды, что приводит к сокращению частоты кадров. Этот показатель также учитывает число пропущенных одновременных кадров. Наша цель — добиться отсутствия пропущенных кадров во время анимации. 3. Время до первого кадра
Большинство пользователей хотят, чтобы приложения запускались быстро, поэтому инициализация DirectX должна занимать мало времени. "Время до первого кадра" говорит нам, сколько времени после касания или щелчка приложения требуется для того, чтобы увидеть первый кадр приложения на экране. Для измерения этого показателя мы создали простые приложения, помогающие анализировать и оптимизировать работу графической системы при инициализации графического устройства, выделении памяти и т. д. Это помогает обеспечить быстрое выполнение настройки DirectX. 4. Использование памяти
Чем больше памяти используют графические компоненты, тем меньше памяти доступно для приложений. Гарантируя, что большая часть системной памяти доступна для приложений, вы обеспечиваете высокую производительность приложений и получаете возможность запускать больше приложений одновременно. Приложения используют сочетание системной памяти и памяти графического процессора. Память графического процессора в основном используется для операций отрисовки, таких как рисование изображений и геометрических фигур и отображение текста. Кроме того, существуют графические операции, использующие центральный процессор и, тем самым, системную память.
Для классификации использования памяти мы измеряем объем памяти, используемый системой в следующих сценариях: Приложение бездействует. Это значит, что оно не выполняет работу и не отображает новые данные на экране. Приложение отображает данные на экране.. Этот показатель представляет базовые затраты памяти на простое отображение графики. Создание текстур. Этот показатель представляет объем памяти, используемый для создания множества объектов изображения в графическом процессоре. Создание буфера вершин. Этот показатель представляет память, требуемую для создания геометрических фигур. Передача данных графическому процессору. Этот показатель измеряет память, используемую при передаче данных в графический процессор.
Измерение используемого объема памяти для различных типов приложений и сценариев помогло нам еще в большей мере оптимизировать DirectX и видеодрайверы. 5. Использование центрального процессора
В большинстве графических операций помимо графического используется и центральный процессор. Например, когда приложение определяет, что будет отображаться, оно выполняет вычисления на центральном процессоре. Показатель использования центрального процессора очень важен, так как чем выше процент его использования для задачи, тем меньше циклов он может уделить другим задачам. Для обеспечения хорошей производительности графики и общего отклика системы важно эффективно распределять нагрузку между центральным и графическим процессорами.
Эти тесты и показатели помогают обеспечить плавную и быструю работу приложений и пользовательского интерфейса. Они играют важную роль в понимании основных приложений. Конечно, мы по-прежнему используем различные тесты производительности, игры и другие методы для оценки общей производительности. Аппаратное ускорение основной графики
Существует множество способов анализа основной графики. Чтобы гарантировать, что наша работа обеспечит пользователям должный уровень производительности, мы изучили множество примеров приложений в стиле Metro и классических приложений, чтобы понять, как они используют графическое оборудование. В частности, Internet Explorer 9, Windows Live Mail и Windows Live Messenger прекрасно используют DirectX. Так как эти приложения применяют DirectX, они являются хорошими примерами того, что доступно другим приложениям. Это привело к ряду инвестиций, позволяющих сделать основные приложения быстрыми и красивыми. Повышение скорости отображения текста
На данный момент, текст является самым часто используемым графическим элементом в Windows, поэтому повышение скорости отображения текста играет важную роль в улучшении общей производительности. Веб-страницы, почтовые программы, программы обмена мгновенными сообщениями и другие приложения для чтения выиграют от качественного и быстрого отображения текста.
Язык проектирования стиля Metro обладает богатыми типографическими функциями, а несколько функций стиля Metro сфокусированы на обеспечении удобных возможностей для чтения. DirectWrite обеспечивает высокое типографское качество, сверхбыструю обработку данных шрифтов для отрисовки, а также поддерживает ведущие текстовые технологии. Мы продолжили улучшать скорость отображения текста в Windows 8, оптимизируя стандартную отрисовку текста в приложениях в стиле Metro для повышения производительности и эффективности, поддерживая при этом типографское качество и глобальные текстовые технологии.
На линейчатой диаграмме ниже показаны улучшения производительности, достигнутые в результате этой работы. На ней представлены измерения для следующих текстовых сценариев: Отрисовка на весь экран читаемого текста, форматированного в виде абзацев, как на веб-странице или в документе Word Отрисовка на весь экран небольших блоков читаемого текста, как в элементах управления пользовательского интерфейса, таких как надписи кнопок и меню Отрисовка на экране множества небольших блоков текста, как в заголовках в приложениях в стиле Metro и в названиях записей блога и новостей в Интернете.
Самые заметные улучшения производительности видны при прокручивании длинного документа на сенсорном экране. Сокращение времени, необходимое для отрисовки символов, позволяет использовать центральный процессор для обработки других задач, таких как обработка высокочастотного сенсорного ввода или отображение сложных структур документов. Улучшение производительности отрисовки геометрических объектов
Наряду с текстом мы также значительно улучшили отрисовку двухмерных геометрических объектов. Отрисовка геометрических объектов — это основа графической технологии, используемой для создания таких элементов, как таблицы, диаграммы, графики и элементы пользовательского интерфейса, как показано в примере ниже. Для Windows 8 наши улучшения в этой области были сконцентрированы на высокопроизводительной реализации технологий HTML5 Canvas и SVG для применения в приложениях в стиле Metro и веб-страницах, просматриваемых в Internet Explorer 10.
Приложение Weather в Windows 8 использует геометрические объекты для отображения графика температур и осадков
Когда модуль Direct2D рисует геометрические объекты, он следует инструкциям приложения о том, что нужно рисовать в форме двухмерных фигур (т. е. прямоугольников, эллипсов и линий), каковы должны быть размер и положение этих фигур, а также использует данные о стиле отрисовки, в том числе цвете и формате начертания. Затем Direct2D преобразует эти инструкции в набор треугольников и команд, передаваемых в Direct3D, для формирования нужного изображения. Этот процесс преобразования мы называем тесселяцией.
Чтобы улучшить скорость отрисовки геометрических объектов в Windows 8, мы решили сократить затраты центрального процессора, связанные с тесселяцией, двумя способами.
Во-первых, мы оптимизировали нашу реализацию тесселяции при отрисовке простых объектов, таких как прямоугольники, линии, скругленные прямоугольники и эллипсы. Ниже представлена диаграмма с результатами этих улучшений.
Во-вторых, для улучшения производительности при отрисовке неправильных объектов (например, географических границ на карте) мы используем новую аппаратную графическую функцию — независимую растеризацию цели или TIR.
TIR позволяет Direct2D тратить меньше циклов центрального процессора на тесселяцию, чтобы процессор мог быстрее и эффективнее передавать инструкции по отображению в графическом процессоре, не жертвуя при этом качеством изображения. Функция TIR доступна в новых графических процессорах, разработанных для Windows 8 и поддерживающих DirectX 11.1.
Ниже представлена диаграмма, показывающая улучшения производительности отрисовки геометрических объектов со сглаживанием для различных SVG-файлов на графическом процессоре с DirectX 11.1 с поддержкой TIR:
Мы тесно сотрудничали с нашими партнерами, производящими графическое оборудование, для разработки TIR. Это партнерство позволило добиться значительных улучшений. Оборудование DirectX 11.1 уже доступно на рынке, а мы вместе с партнерами работаем над увеличением числа доступных TIR-совместимых продуктов. Отрисовка изображений
Изображения используются во множестве различных сценариев, в том числе при отображении пользовательского интерфейса, веб-страниц и другого содержимого приложений. На веб-сайтах часто используются JPEG-файлы для рисунков и PNG- и GIF-файлы для эффективного хранения элементов пользовательского интерфейса, таких как кнопки.
Работа с цифровыми фотографиями также является одной из распространенных операций в Windows. Число фотографий, просматриваемых и обрабатываемых пользователями Windows на своих компьютерах, продолжает расти с невероятной скоростью.
Мы реализовали несколько улучшений для работы с изображениями и фотографиями с использованием форматов JPEG, GIF и PNG.
Вот некоторые из этих улучшений для формата JPEG: ускоренное декодирование изображений за счет расширения применения SIMD для всех архитектур центрального процессора; ускоренное декодирование и кодирование Хаффмана.
Вот некоторые из этих улучшений для формата PNG: ускоренное декодирование изображений за счет расширения применения SIMD для всех архитектур центрального процессора; ускоренное кодирование и декодирование изображений за счет оптимизации нашей реализации zlib.
Кроме того, мы улучшили преобразование формата пикселей, а также масштабирование изображений. Это позволило ускорить декодирование и отрисовку изображений для всех приложений.
В видеоролике, представленном далее, используется тестовое приложение для измерения времени декодирования и отрисовки набора изображений. В Windows 8 для отрисовки 64 изображений требуется на 40% времени меньше, чем в Windows 7 (4,38 с и 7,28 с соответственно) Отрисовка и отображение
Помимо развития DirectX для поддержки основных сценариев мы также работали над оптимизацией отрисовки и отображения содержимого приложений. Существуют значительные отличия между тем, как отображает содержимое трехмерная игра, и тем, как это делает основное приложение, такое как Internet Explorer. Например, рассмотрим видеоролик игры, представленный ниже. В таких играх вся сцена изменяется очень быстро. По мере вращения "камеры" вокруг танка, по небу двигаются облака, от двигателя поднимается дым, а приложение должно перерисовывать всю сцену на каждом кадре для достижения реалистичного изображения.
Ваш браузер не поддерживает HTML5-видео. Загрузите это видео, чтобы просмотреть его в своем медиапроигрывателе: MP4, высокое качество | MP4, низкое качество
Теперь рассмотрите веб-страницу ниже. Она содержит текстовую статью и видео. Когда видеоролик воспроизводится, браузер должен обновлять часть окна с видеороликом, но не с текстом. Кроме того, если пользователь прокручивает страницу, необходимо отрисовать только новый текст в нижней части страницы. Остальной текст уже отрисован, и его просто нужно переместить.
Чтобы улучшить приложения, в которых не нужно перерисовывать весь экран для каждого кадра, мы оптимизировали то, как DirectX обрабатывает перерисовку частей экрана и прокрутку экрана. Это не только повышает эффективность и производительность приложений, но и уменьшает потребление энергии, увеличивая срок работы батареи, за счет сокращения ненужных операций рисования и объема данных, которые требуется копировать в память. Оптимизация всей платформы
Все эти изменения помогают Windows быстро и плавно выполнять отрисовку графики. Хотя мы в основном говорили о функциях DirectX, вся эта работа позволяет всей нашей платформе по ��молчанию поддерживать аппаратное ускорение. Так как мы построили платформу стиля Metro на основе DirectX, все приложения могут воспользоваться всеми преимуществами графического оборудования в системе независимо от языка или платформы программирования, выбранных разработчиками. Создание потрясающих визуальных эффектов с помощью Direct2D и Direct3D Эффекты Direct2D
Стилистические эффекты, применяемые к изображениям, становятся все более распространенными в современных пользовательских интерфейсах. Они помогают выделить область приложения, привлечь внимание к определенной части экрана или просто улучшить внешний вид элементов. Когда мы планировали разработку графических возможностей Windows 8, мы хотели упростить для разработчиков применение этих эффектов в своих приложениях. Мы рассмотрели две основных области, где обработка изображений будет полезной: Изображения в пользовательском интерфейсе В пользовательском интерфейсе в стиле Metro применяются динамические изображения. Мы хотели позволить приложениям в стиле Metro обрабатывать изображения в реальном времени. В число возможных операций могут входить трехмерные эффекты переходов, преобразования перспективы, размывание и выделение элементов интерфейса. Фотографии Приложениям, работающим с фотографиями, часто требуется широкий спектр функций обработки изображений. Такие эффекты, как корректировка экспозиции, яркости и контрастности, обеспечение динамичности и четкости, работа со сложными кривыми и применение корректирующих линз, позволяют таким приложениям улучшить ваши электронные воспоминания.
Для реализации подобных функций мы добавили "Эффекты Direct2D", новый набор интерфейсов API, позволяющих применять к любому изображению качественные эффекты с аппаратным ускорением. Эффекты Direct2D предоставляют следующие преимущества: обеспечивают отрисовку эффектов оптимального качества в соответствии с потребностями различных приложений; используют аппаратное ускорение и работают с широким спектром графического оборудования; простой API позволяет добиться прекрасных эффектов с минимальными усилиями; предоставляют множество встроенных эффектов; поддерживают крупноформатные размеры до 32 разрядов на канал; настраиваемые эффекты можно объединять со встроенными или другими настраиваемыми эффектами.
Эффекты Direct2D используются для реализации некоторых новых возможностей пользовательского интерфейса в Windows 8. Например, при касании плитки на начальном экране плитка использует эффект трехмерного преобразования перспективы для наклона в нужном направлении. Эти эффекты также применяются во всей платформе. Например, эффекты фильтра SVG и трехмерные преобразования CSS реализуются с помощью эффектов Direct2D. Direct3D 11.1 как общая платформа
Хотя добавление таких новых функций, как эффекты Direct2D — это прекрасный способ помочь разработчикам реализовать новые возможности, мы также искали способы упростить использование уже имеющихся функций DirectX.
За годы разработок мы добавляли различные возможности в DirectX. Аппаратное ускорение при декодировании видео и программируемые шейдеры появились в Direct3D 9. В Windows 7 мы добавили Direct2D на основе Direct3D 10. В то же время мы также создали DirectCompute, новую систему для высокопроизводительных вычислений на графическом процессоре, которая стала частью Direct3D 11. В результате этих обновлений платформа DirectX получила всесторонний набор функций для обработки графики и вычислений в графическом процессоре, но побочным эффектом этого также стало усложнение создания приложений, использующих видео, двух- и трехмерную графику, текст и DirectCompute вместе.
В Windows 8 новый интерфейс API Direct3D 11.1 является основной для аппаратного ускорения двухмерной графики и текста, обработки изображений, трехмерной графики и вычислений, а также воспроизведения видео. Новый интерфейс API значительно упрощает объединение различных типов контента на одной сцене, так как этот API теперь управляет всеми ресурсами графического процессора, связанными с отрисовкой. Это также сокращает объем используемой памяти за счет устранения избыточных объектов управления графикой в коде приложения. Кроме того, Direct3D 11.1 предоставляет согласованные возможности для доступа приложений к различным функциям разного графического оборудования. Direct3D 11.1 реализует механизмы, позволяющие приложению определить, какие функции доступны, и только затем использовать их. Так приложения могут извлечь максимальную выгоду из возможностей графического процессора, будь он разработан для длительной работы аккумулятора на планшете или для сложных игр на настольном ПК. Разнообразное графическое оборудование
Исторически сложилось, что ожидания от каждого следующего выпуска Windows заключались в том, что и графическая платформа, и возможности графического оборудования будут становиться все мощнее. Это по-прежнему так, поскольку производители графического оборудования продолжают создавать все более быстрые и мощные графические процессоры. Но в Windows 7 мы начали замечать перелом в этих ожиданиях, связанный с ростом разнообразия оборудования после развития мобильных устройств с малым энергопотреблением.
С приближением выхода Windows 8 эта тенденция продолжает развиваться, появляются новые высокопроизводительные графические карты и новые мобильные устройства. Оборудование для Windows 8 будет таким разнородным, как никогда ранее: от графического оборудования мощностью не более 10 Вт на планшетных ПК, постоянно подключенных к Интернету, до мощных систем с несколькими графическими картами и совокупной мощностью 1000 Вт и более. Такое разнообразие заставляет нас применять новые принципы проектирования.
Нашей целью остается визуально богатая и быстро отображаемая графика. В мобильных устройствах основным источником питания является батарея, поэтому нам также нужно увеличить срок ее работы. Чтобы удовлетворить требования к производительности и энергопотреблению этих новых форм-факторов, многие из наших партнеров, производящих графическое оборудование, разработали новые архитектуры графического процессора. Системы с низким энергопотреблением
Одной из графических архитектур, часто применяемых в системах с низким энергопотреблением для достижения высокой производительности и длительной работы батареи, является "отрисовка на основе плиток". Основной концепцией такого подхода является использование небольшого кэша с очень высокой производительностью, который используется графическим модулем для отрисовки. Графический процессор отображает экран по разделам (или плиткам), повторно обрабатывая один и тот же набор команд для каждой плитки, а не отрисовывает весь экран одновременно. Цель этого процесса — минимизировать операции, использующие внешнюю память, тем самым сократив энергопотребление и повысив производительность. Многочисленные обращения к внешней памяти отнимают много времени и энергии.
Чтобы повысить эффективность таких архитектур, мы добавили ряд флагов, подсказок и новых интерфейсов API, которые могут минимизировать число операций отрисовки плиток. Мы внедрили эти принципы в платформу разработки приложений в стиле Metro, чтобы добиться высокой эффективности в приложениях, работающих на графическом оборудовании, использующем архитектуру с отрисовкой на основе плиток.
Еще один способ снижения энергопотребления графического оборудования и одновременного обеспечения высокой производительности — выполнение вычислений для отрисовки с помощью меньшего числа битов точности. Это позволяет графическому процессору более эффективно структурировать данные для параллельной обработки большего объема данных, что сокращает необходимую для этого мощность. В Windows 8 мы добавили новые механизмы, позволяющие приложениям указывать необходимую точность графических вычислений. Например, при смешивании нескольких изображений качеством 8 бит на компонент, вычисления смешивания можно выполнять с точностью 10 бит, а не стандартной точностью в 32 бита. Снижение точности не влияет на качество изображения, но сокращает энергопотребление. Высокая производительность и плавная отрисовка
Ваш браузер не поддерживает HTML5-видео. Загрузите это видео, чтобы просмотреть его в своем медиапроигрывателе: MP4, высокое качество | MP4, низкое качество
Как видите, мы проделали много работы, чтобы добиться очень быстрого и плавного отображения графики в Windows 8. Благодаря н��вым способам оценки улучшений, оптимизации применения графической платформы в основных приложениях и новым аппаратным возможностям мы создали лучшую на текущий момент графическую платформу Windows. И конечно, мы продолжаем расширять горизонты для трехмерных игр с эффектом погружения благодаря прекрасной производительности и новым функциям, таким как стереоскопическое изображение.
Windows 8 поддерживает самый широкий диапазон графического оборудования, от мощных игровых платформ до компактных планшетных ПК, в одной операционной системе. Надеемся, что эта запись пояснила, как наша работа позволяет реализовать абсолютно новые возможности.
- Роб Коупленд (Rob Copeland)
P.S. Спасибо Шрираму Субраманиану (Sriram Subramanian), Дэну МакЛахлану (Dan McLachlan), Кэм ВедБрат (Kam VedBrat), Стиву Лиму (Steve Lim) и Жань Лю (Jianye Lu) за их значительный вклад в создание этой записи блога.