При использовании GLSL на современных графических процессорах (GL3.3 +), какова вероятная стоимость разветвления на униформе?Стоимость ветвления на униформах на современных графических процессорах
В моем двигателе я добираюсь до такой степени, что у меня много шейдеров. И у меня есть несколько различных пресетов качества для многих из них. Как бы то ни было, я использую форму с if() в шейдерах, чтобы выбрать разные пресеты. Тем не менее, я беспокоюсь, что я мог бы добиться большей производительности, перекомпилировав шейдеры и используя #ifdef. Проблема заключается в необходимости беспокоиться о отслеживании и перезагрузке других униформ при перекомпиляции шейдера.
В принципе, я хочу знать, если мои опасения необоснованны. Разветвляется на унифицированной дешевой на современных графических процессорах? Я сделал несколько тестов сам и нашел очень мало различий в любом случае, но я только тестировал на nVidia 680.
Драйвер может перекомпилировать шейдер с помощью встроенных униформ, если он видит, что стоимость разветвления в противном случае будет слишком велика. –
Расхождение потоков, где параллельные вызовы шейдера принимают разные пути управления, является серьезной проблемой в современных графических процессорах. Униформа применяется ко всем вызовам в программе, однако это не проблема. Избегание разветвления по атрибутам вершин или иначе динамические данные - лучшее использование вашего времени. –
Итак, на практике, на современном графическом процессоре вряд ли будет меньше, чем перекомпиляция с помощью констант, либо потому, что ветви немного отличаются от тех, что находятся на процессоре, либо потому, что компилятор просто перекомпилирует шейдер автоматически. Правильно ли я понимаю? – Jagoly