Как правильно рассчитать FPS, учитывая, что у графических процессоров есть задача очереди и являются асинхронными?

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

Но!

Современные видеокарты рассматриваются как асинхронные серверы, поэтому цикл рисования отправляет инструкции рисования для данных вершин / текстуры и т. Д., Уже находящихся на GPU. Эти вызовы не блокируют вызывающий поток до тех пор, пока запрос на GPU не завершится, они просто добавляются в очередь задач GPU. Так что, безусловно, «традиционный» (и довольно повсеместный) метод - это просто измерение времени отправки вызова?

Что побудило меня спросить, реализовал ли я традиционный метод, и он давал неизменно абсурдно высокую частоту кадров, даже если то, что рендерилось заставил анимацию стать прерывистой. Повторное чтение моей OpenGL SuperBible привело меня к glGenQueries, которая позволяет мне синхронизировать разделы конвейера рендеринга.

Подводя итог, можно сказать, что «традиционный» способ расчета FPS полностью перестает работать с (едва ли) современными видеокартами? Если да, то почему методы профилирования графического процессора относительно неизвестны?

7
задан Ciro Santilli 新疆改造中心法轮功六四事件 17 March 2016 в 08:10
поделиться