Проблемы с рендерингом Android в Google Nexus Player с графическим процессором Imagination

В наших публикациях (рассматривая устройства Samsung S8, NVIDIA Shield и Google Pixel) мы видели, как ShaderTest GLES выявляет проблемы рендеринга, сбои, сбои компиляции и проблемы с производительностью, перекрестно проверяя семейства эквивалентных шейдеры.

Теперь мы обратим наше внимание на графический процессор Imagination PowerVR, который поставляется с Google Nexus Player. Nexus Player по-прежнему активно поддерживается Google с недавним обновлением Android 8.0 (Oreo).

Ознакомьтесь с результатами наших тестов.

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

Проблема недетерминизма демонстрируется приведенным выше анимированным изображением, которое взято из результатов для семейства шейдеров 002. Анимация переключается между чистым изображением (ожидаемый результат) и поврежденным изображением. Эти изображения захватываются путем рендеринга кадра с использованием одного и того же скомпилированного фрагментного шейдера несколько раз.

Помимо того, что недетерминизм является проблемой для конечных пользователей, он потенциально очень серьезен, потому что он может быть связан с проблемами безопасности памяти, когда данные мусора считываются с недопустимых адресов из-за ошибки драйвера - мы обнаружили подобную проблему при применении наших методов. на графические процессоры Apple в более старых версиях iOS , которые Apple впоследствии исправила (см. CVE-2017–2424 ).

Обращаясь к детерминированным проблемам рендеринга, мы видим несколько случаев, когда даже наш небольшой набор шейдеров из ShaderTest GLES приводит к множеству различных неправильных изображений для каждого семейства шейдеров. Далее в каждой строке показано эталонное изображение для семейства шейдеров и два неверных изображения, отрендеренные для вариантов этого семейства на Nexus Player с помощью графического процессора Imagination:

Вот краткое изложение наших результатов:

  • Qualcomm: наибольшее количество проблем в целом; самый высокий уровень сбоев; множество ошибок компиляции; довольно много проблем с рендерингом.
  • Воображение: самый высокий уровень проблем с рендерингом; только графический процессор для недетерминированного рендеринга; множество сбоев и сбоев компиляции.
  • NVIDIA: самый высокий показатель таймаутов на сегодняшний день; множество ошибок компиляции; некоторые сбои и проблемы с рендерингом.
  • ARM: самый низкий уровень проблем с рендерингом и сбоев компиляции; много сбоев.

Это подчеркивает, что у всех разработчиков графических процессоров есть проблемы, которые может помочь решить ShaderTest GLES.

Эта таблица, отсортированная по проблемам рендеринга, дает более подробную информацию; На нашем веб-сайте есть интерактивная версия, в которой вы можете сортировать другие способы:

Детали

Девиантная ссылка?

Для семейства шейдеров 002 эталонное изображение Imagination отличается от всех остальных:

Эта разница распространяется на все варианты в семействе шейдеров. Возможно, это и не ошибка - в спецификации GLES намеренно отсутствует семантика с плавающей запятой - но это несоответствие, вероятно, будет полезно для исследования Imagination.

Миссия выполнима!

До этого поста мы не видели устройства, которое могло бы рендерить изображение для варианта 199 семейства шейдеров 010. Что ж, теперь он у нас есть! Проигрыватель Google Nexus с графическим процессором Imagination PowerVR и драйвером отображает изображение, и это правильное изображение.

Никаких чистых подметаний

Несмотря на то, что с этим жестким шейдером справились лучше, чем у конкурентов, в целом драйвер Imagination, похоже, страдает от множества проблем, и мы не видим никаких «чистых разверток»: для каждого семейства шейдеров наши результаты показывают по крайней мере одну проблему рендеринга. , сбой компиляции или сбой.

В следующий раз

Давайте посмотрим на еще несколько графических процессоров ARM Mali, на этот раз в смартфонах Huawei Honor 9 и Honor 10.