Профилирование графического рендеринга без профилировщика - PullRequest
9 голосов
/ 14 июля 2011

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

Предположим, по какой-то причине у вас нет такого инструмента или он очень ограничен.Как бы вы все-таки измерили, что занимает время при рендеринге?

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

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

Какие приемы вы используете, когда ваш рюкзак почти пуст и вам все еще нужно профилировать рендеринг?В чем состоит ваш личный швейцарский армейский нож?

Ответы [ 2 ]

4 голосов
/ 14 июля 2011

Время рендеринга кадра

Абсолютное время, потраченное на небольшой код / ​​этап / и т. Д. это не так важно, так как оптимизация / пакетирование / параллелизм / версия драйвера графического процессора делает практически невозможным точное измерение кода без счетчиков графического процессора. (который можно получить, если вы используете библиотеки libs)

То, что вы можете легко измерить, - это каждое отдельное влияние изменения кода. Вы получите только относительное влияние, и это то, что вам действительно нужно в любом случае. И это только с использованием времени рендеринга кадров.

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

Вот список швейцарских армейских ножей:

  • загрузчик состояний сцены
  • средство записи сцены (пути камеры / добавления-удаления объектов, текстуры, сетка, ложный ввод и т. Д.) С использованием состояний сцены.
  • заставка состояний сцены
  • регистратор времени кадра (не только окончательное среднее, но и время рендеринга каждого кадра)
  • перезагрузка кода шейдера на лету
  • переключатель кодовой дорожки на лету
  • считыватель журнала времени кадра + графики + статистические рамки

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

Если можете, добавьте это на свой CI-сервер, чтобы огромное влияние кода не осталось незамеченным. (помогает также художникам при регистрации своих активов, не оценивая влияние рендеринга) Обязательно прочитайте о том, что работа по графическому тестированию CI находится здесь: http://aras -p.info / blog / 2011/06/17 / testing-graphics-code-4-years-позже /

1 голос
/ 21 июля 2011

Примечание: я отвечаю на вопрос: «Профилирование графического рендеринга с помощью профилировщика», поскольку это то, что я искал;)

Я работаю в основном надMac, и я использую несколько инструментов:

  • gDebugger версия 5.8 доступна для Windows и Mac (этот инструмент был куплен AMD,версия v6 только для Windows).Он дает вам статистику об изменениях состояния, использовании текстур, вызовах отрисовки и т. Д. Он также полезен для отладки текстурных отладок и просмотра, как рисуется ваша сцена, шаг за шагом.
  • PVRUniSCoEditor это редактор шейдеров.Он компилируется на лету и дает вам ценную информацию о предполагаемых циклах и использовании регистров.
  • Инструменты (из XCode Utilities, только для OSX), он получает информацию от драйвера OpenGL, замечательно найти узкое место, так как вы можете отслеживатькакая часть графического процессора используется на 100% (тайлер, рендерер, текстурный блок и т. д.)
  • Adreno Profiler инструмент Windows для профилирования Adreno-на основе мобильных устройств.(Очень хороший инструмент, если вы работаете с приложениями для Android;))

В чем ваша хитрость относительно «шейдера немого фрагмента, чтобы выделить скорость заполнения»?(рисование простым цветом? или что-то более продвинутое?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...