Подтвердить что ты не робот

Что означает статистика использования Tiler в инструменте iPhone OpenGL ES?

Я пытаюсь выполнить некоторые оптимизации производительности OpenGL ES, пытаясь увеличить количество треугольников в секунду, которые я могу отобразить в своем приложении для iPhone, но я ударил по кирпичной стене. Я попытался преобразовать свои типы данных OpenGL ES с фиксированной точки в плавающую точку (за рекомендация Apple), перемежая объекты вершинного буфера и минимизируя изменения в, но ни одно из этих изменений не повлияло на скорость рендеринга. Независимо от того, что я, похоже, не могу подтолкнуть свое приложение выше 320 000 треугольников на iPhone 3G, работающий под ОС 3.0. Согласно этот тест, я должен ударить 687 000 треугольников/с на этом оборудовании с гладким оттенком, который я использую.

В моем тестировании, когда я запускаю инструмент производительности OpenGL ES в Инструментах против работающего устройства, я вижу, что статистика "Использование Tiler" достигает почти 100% при рендеринге моего теста, но "Использование Renderer" только получает до около 30%. Это может быть ключом к тому, что узкое место в процессе отображения, но я не знаю, что означают эти значения, и я не нашел на них никакой документации. У кого-то есть хорошее описание того, что эта и другая статистика в iPhone OpenGL ES стоят? Я знаю, что PowerVR MBX Lite в iPhone 3G является отложенным рендерером на основе плитки, но я не уверен, какая разница между ними Renderer и Tiler в этой архитектуре.

Если это помогает в любом случае, исходный код (BSD-лицензия) для этого приложения доступен, если вы хотите загрузить и протестировать его сам. В текущей конфигурации он запускает небольшой тест каждый раз, когда вы загружаете новую молекулярную структуру и выводите треугольники/на консоль.

4b9b3361

Ответ 1

В процентах использования утилиты использования и использования инструментальных средств измеряется рабочий цикл аппаратного обеспечения вершин и фрагментов, соответственно. В MBX использование Tiler обычно масштабируется с количеством вершинных данных, отправляемых на GPU (как по количеству вершин, так и по размеру атрибутов, отправленных per-vertex), а использование фрагментов обычно увеличивается с использованием избыточного и текстурного выборок.

В вашем случае лучше всего уменьшить размер каждой отправляемой вами вершины. Во-первых, Id пытается объединить ваши атомы и облигации по цвету и отправлять каждый из этих ящиков, используя постоянный цвет вместо массива. Id также предлагает исследовать, подходят ли шорты для ваших позиций и нормалей, при условии соответствующего масштабирования. В этом случае вам также может понадобиться место по положению, если шорты масштабируются, чтобы обеспечить достаточную точность arent, охватывающую диапазон, в котором вы нуждаетесь. Такие методы могут потребовать дополнительных вызовов рисования, но я подозреваю, что улучшение пропускной способности вершин перевешивает дополнительные накладные расходы ЦП для каждого вызова.

Обратите внимание, что в целом это полезно (в MBX и в других местах), чтобы гарантировать, что каждый атрибут вершины начинается с 32-битной границы, что подразумевает, что вы должны поместить свои позиции и нормали на 4 компонента, если вы переключите их на шорты. Особенности платформы MBX также делают так, что вы хотите фактически включить W-компонент позиции в вызов glVertexPointer в этом случае.

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

Ответ 2

Отличный ответ, @Pivot! Для справки этот документ Apple определяет следующие термины:

  • Использование Renderer%. Процент времени, затрачиваемого графическим процессором на обработку фрагментов.
  • Использование Tile. Процент времени, затрачиваемого графическим процессором на обработку и обработку вершин.
  • Использование устройства%. Процент времени, затрачиваемого графическим процессором на выполнение какой-либо работы по черепице или рендерингу.