GLSL: что является более оптимальным?Пинг-понг с петлями на процессоре или петлями во фрагментном шейдере? - PullRequest
3 голосов
/ 02 мая 2011

У меня есть фрагментный шейдер, который выполняет цикл for с числом проходов, переданных в виде единой переменной int.

uniform int numPasses;
void main(void) {
   for (int i=0; i<numPasses; i=i+1) {
      //do something
   }
}

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

Я пытаюсь проверить пинг-Понги, но я просто хотел узнать мнение людей, которые могли столкнуться с этим раньше.

1 Ответ

0 голосов
/ 16 августа 2013

Учитывая, что вам не нужны данные из смежных потоков, похоже, что было бы быстрее не беспокоиться о нескольких проходах рендеринга и избежать вызовов отрисовки, синхронизации и растеризации.

Тем не менее, если вашЦикл большой, общие вычисления сильно меняются во времени, или у вас недостаточно фрагментных шейдеров, работающих для того, чтобы поддерживать занятость графического процессора, это может ухудшить производительность.,Как вы уже делаете, тестирование обоих, вероятно, лучше всего.Было бы интересно увидеть разницу, когда вы меняете количество проходов и фрагментов.

...