Я понимаю, что этот вопрос может показаться несколько необоснованным, но , если кто-то знает что-то теоретическое / имеет практический опыт по этой теме, было бы здорово, если бы вы этим поделились. 12110] Я пытаюсь оптимизировать один из моих старых шейдеров, который использует много текстурных поисков.
У меня есть диффузный, нормальный, карты отражений для каждой из трех возможных плоскостей отображения и для некоторых лиц, которые находятся рядом с пользователем, я также должен применить методы отображения, которые также приносят много текстурных поисков (например, отображение параллакса
) .
Профилирование показало, что поиск текстур является узким местом шейдера, и я готов убрать некоторые из них. Для некоторых случаев входных параметров я уже знаю, что часть поиска текстуры будет ненужной и очевидное решение - это сделать что-то вроде (псевдокод) :
if (part_actually_needed) {
perform lookups;
perform other steps specific for THIS PART;
}
// All other parts.
Теперь - вот вопрос.
Я точно не помню (поэтому я сказал, что вопрос может быть необоснованным ), но в какой-то статье я недавно прочитал (к сожалению, могу ' техника зависит от того, насколько эффективна ОБЯЗАТЕЛЬНОЕ ОБОРУДОВАНИЕ Реализовано BRANCHING .
Я вспомнил этот вид оператора прямо перед тем, как начал рефакторинг большого количества шейдеров и реализовать ту оптимизацию на основе if
, о которой я говорил.
Итак - прямо перед тем, как я начал это делать - кто-нибудь знает что-нибудь об эффективности ветвления в шейдерах? Почему ветвление может серьезно снизить производительность шейдеров?
И возможно ли, что я смог бы только ухудшить реальную производительность с помощью ветвления на основе if
?
Вы могли бы сказать - попробуй и посмотри. Да, это то, что я сделаю, если здесь никто мне не поможет :)
Но все же то, что в случае if
может быть эффективным для новых GPU, может стать кошмаром для немного более старых .