Bonus
> Я про переключение Render target'ов, а не про переключение шейдеров/вершинных
> буферов/материалов.
Переключение рендер таргета это точно такое же (почти) переключение стейта в терминах стейтфулл ГАПИ, как и переключение шейдера.
Если у тебя новый рендер таргет точно такого же формата, размера и т.д. то это переключение будет относительно дешевым (это как поинтер поменять), ну и надо заплатить за трансфер данных. Я не особо знаком с архитектурами отличными от ПВРовских, но на пвр чипах на каждом тайле есть свой небольшой буфер для текущего рендер таргета (как я уже выше писал), когда ты переключаешь рендер таргеты, то гпу будет выгружать эти данные в основную память и загружать данные нового таргета.
Иногда этого оверхеда можно избежать - когда тебе больше не нужно содержимое таргета - дискарди его через glDiscardFramebufferEXT https://www.khronos.org/registry/gles/extensions/EXT/EXT_discard_… amebuffer.txt Или используй glClear, когда ты биндишь новый таргет, что бы не читать данные с основной памяти, а просто перезаписать то, что было до этого.
Bonus
> Вот про минимизацию этих переключений и стоит вопрос
Ну так и минимизировать их ты сможешь только отсортировав отрисовку по этим самым рендер таргетам. Плюс, как выше писал Belfegnar стараться использовать буферы меньшего размера.
innuendo
> Ну, вместо двух проходного Гаусса - делай один. Сумма по N*N выборкам.
Еще надо не забывать про dependent texture fetch, который довольно ощутимо роняет производительность на мобильных девайсах.
Депендент превращается в индепендент, если передавать координаты с вершинного шейдера, вместо вычитания в пиксельном - http://www.sunsetlakesoftware.com/2013/10/21/optimizing-gaussian-… rs-mobile-gpu
StiX
Дискард делаю, с этим разобрался. РТ все одного формата, по размеру тоже все одинаковые 1/4 экрана. Т.е. в этом смысле максимум сделал.
Но надо еще ужать. Я сделал DOF по статье http://http.developer.nvidia.com/GPUGems3/gpugems3_ch28.html
StiX
> Еще надо не забывать про dependent texture fetch, который довольно ощутимо
> роняет производительность на мобильных девайсах.
С этим тоже разобрался, в пиксельном uv не считаю, все в вертексном и только .xy (.zw он начинает тоже считать как индепендент)
StiX
> glDiscardFramebufferEXT
ага отличная штука на Android кстати Adreno вроде тоже держит это расширение.
Andrey
> ага отличная штука на Android кстати Adreno вроде тоже держит это расширение.
Все тайловые держат, даже не тайловая нвидиа держит, правда, оно там ниче не делает, потому, что оно и не гарантирует ничего - это просто хинт
Andrey
> ага отличная штука на
ай, ай - а как же слова про вендор специфик ?
innuendo
> ай, ай - а как же слова про вендор специфик ?
Причем тут вендор специфик и GL_EXT_discard_framebuffer который держат практически все распространенные мобильные чипы с OpenGL ES 2.0 и выше. Опять лишь бы ляпнуть?
Andrey
> Опять лишь бы ляпнуть?
Ну почему же. Держат, как я понял, не все. Сегодня вендор поддерживает, завтра - нет. Не работают тут правила от MS :)
Andrey
> Опять лишь бы ляпнуть?
Конечно, это же иннуэнда. Я готов поспорить, что в тесте Тьюринга любой человек без замедления определит, что он корявый ИИ
StiX
> Конечно, это же иннуэнда. Я готов поспорить, что в тесте Тьюринга любой человек
> без замедления определит, что он корявый ИИ
Это говорит человек, предложивший сортировать переключения RenderTargets ? :)
Всегда забавляли люди, которым проходится расжёвывать до строчечки
innuendo
> расжёвывать до строчечки
до вопросика из одной строчечки.
Давайте по делу.
У меня следующие вопросы сейчас накопились:
- может ли помочь framebuffer fetch? (примеры использования этой штуки, если можно)
- как замутить пост-процесс на атласах для уменьшения переключений РТ?
- как можно блюрить быстро и качественно за один (или минимум) проходов?
Bonus
> - как замутить пост-процесс на атласах для уменьшения переключений РТ?
Сдвигая viewport и scissor?
> - как можно блюрить быстро и качественно за один (или минимум) проходов?
Устроит простое усреднение ?
innuendo
> Сдвигая viewport и scissor?
А как блюрить в этом случае?
innuendo
> Устроит простое усреднение ?
Это как билинейная фильтрация?
Bonus
> > Устроит простое усреднение ?
> Это как билинейная фильтрация?
1/2 в центре + 4 по 1/8
> А как блюрить в этом случае?
Делать преобразование A*x +b
Тема в архиве.