Предотвращение раскручивания цикла во фрагментном шейдере

Пишу фрагментный шейдер для WebGL (GLSL ES 1.0 )с использованием последней версии Chrome (и Firefox ), и я написал итерационный алгоритм.

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

Кроме того, я должен написать(for, так как это единственный, который должен быть реализован в соответствии со стандартным )циклом, который потенциально длинный, но прерывается почти каждый раз до конца.

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

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

Мне не кажется нормальным, что шейдеру требуется целая минута на компиляцию примерно сотни итераций цикла. Или я делаю не так? Сотня итераций во фрагментном шейдере слишком много для GPU? Потому что он, кажется, работает нормально после компиляции.

5
задан Manux 26 April 2012 в 13:39
поделиться