Эффективность ветвления в шейдерах

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

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

Профилирование показало, что поиск текстур является узким местом шейдера, и я готов убрать некоторые из них. Для некоторых случаев входных параметров я уже знаю, что часть поиска текстуры будет ненужной и очевидное решение - это сделать что-то вроде (псевдокод) :

if (part_actually_needed) {
   perform lookups;
   perform other steps specific for THIS PART;
}

// All other parts.

Теперь - вот вопрос.

Я точно не помню (поэтому я сказал, что вопрос может быть необоснованным ), но в какой-то статье я недавно прочитал (к сожалению, могу ' техника зависит от того, насколько эффективна ОБЯЗАТЕЛЬНОЕ ОБОРУДОВАНИЕ Реализовано BRANCHING .

Я вспомнил этот вид оператора прямо перед тем, как начал рефакторинг большого количества шейдеров и реализовать ту оптимизацию на основе if , о которой я говорил.

Итак - прямо перед тем, как я начал это делать - кто-нибудь знает что-нибудь об эффективности ветвления в шейдерах? Почему ветвление может серьезно снизить производительность шейдеров?

И возможно ли, что я смог бы только ухудшить реальную производительность с помощью ветвления на основе if ?


Вы могли бы сказать - попробуй и посмотри. Да, это то, что я сделаю, если здесь никто мне не поможет :)

Но все же то, что в случае if может быть эффективным для новых GPU, может стать кошмаром для немного более старых .

38
задан duplode 21 July 2015 в 06:25
поделиться