Программирование шейдера - проверьте, если между двумя значениями - PullRequest
1 голос
/ 08 декабря 2011

Шейдеры позволяют if(x>a && x<b), но я понимаю, что логические тесты медленные.Стоит ли оптимизировать его следующим образом:

mid = (a+b)*.5;
half = (b-a)*.5;
if(abs(x - mid) < half){...}

Кажется, кода гораздо больше, но со времен CPU ASM такие приемы иногда стоили делать.

Если half и mid может быть вычислено один раз на процессоре и передано в качестве параметров шейдера, тогда мы заменим: if(x>a && x<b) на: if(abs(x - mid) < half) - это это стоит потрудиться?

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

1 Ответ

0 голосов
/ 31 января 2012

Предварительно вычисленная часть параметров шейдера может быть неактуальной (особенно для DirectX), поскольку компилятор часто достаточно умен, чтобы выяснить, что выражение является постоянным.

Вопрос в том, как реализован abs.Какая у вас целевая видеокарта?Мобильный, середина, Highend

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