Войти
ФлеймФорумПроЭкты

FrameGraph (2 стр)

Страницы: 1 2 3 49 Следующая »
#15
14:05, 20 дек. 2018

Suslik
> я тож думал о том, чтобы хранить при создании все ресурсы в некотором дефолтном
> состоянии и переводить их в нужный лейаут, грубо говоря, on demand.
У меня они переводятся в дефолтное состояние только в конце командного буфера.
Тут еще можно оптимизировать если накапливать статистику о первом и последнем лейауте и менять дефолтный в зависимости от этого.
Либо когда все командные буферы одного батча сформированы можно между ними вставить команд буфер, который сделает синхронизации между ними.
Но все это займет время, а прирост производительности минимальный.

> не вижу контроля, как определяется, в какой мип и леер происходит рендеринг.
Там можно передать ImageViewDesc, либо будет дефолтный view.

> такой код нереально ни поддерживать, ни расширять.
это ведь студенты писали)

> как бы ты организовал rendering loop для такой системы?
Если нужна прям максимальная производительность, то сделал бы один общий pipeline layout для всех шейдеров и обновлял только то, что необходимо.
Так как pipeline layout не меняется, то все descriptor set и push constants не будут сбрасываться при смене пайплайнов.
Но вообще сложно что-то предполагать, нужны тесты с замером производительности.
Где-то может быть проще иметь минимум дескрипторов и просто хранить все данные в одном UB + несколько текстур.
А где-то лучше будет работать вариант когда забиндены все сеты в разные индексы, а обновляются только пуш константы.

#16
14:07, 20 дек. 2018

Suslik
> у тебя есть картинки с их frame graph? интересно посмотреть, как он выглядит.
Тут есть С++ код их кадра и простой граф, более сложный не потянул graphviz
https://github.com/azhirnov/vkTraceConverter/tree/dev/examples

#17
14:09, 20 дек. 2018

Запилил пример как сделать простой дебагер шейдеров.
https://github.com/azhirnov/FrameGraph/tree/dev/samples/glsl_debugger

Можно повесить хуки на любые операторы, сейчас записывается только результат операторов = += -= и тд. Даже для шейдера из шейдертоя понадобилось максимум 0.5Мб, а я то в начале 1Гб выделил))

+ пример

#18
15:46, 20 дек. 2018

Suslik
> ни про менеджмент памяти.
Тут общие рекомендации по управлению памятью и немного про другие оптимизации.
https://gpuopen.com/presentation-porting-engine-to-vulkan-dx12/

Рендер Dota2 (source engine 2) выглядит более технологично, чем дум.
http://media.steampowered.com/apps/valve/2016/Dan_Ginsburg_Source… f_Lessons.pdf

#19
18:45, 20 дек. 2018

/A\
> Рендер Dota2 (source engine 2) выглядит более технологично, чем дум.
серьезно ?

+ Показать
#20
19:01, 20 дек. 2018

0r@ngE
> серьезно ?
Но они используют кучу secondary command buffers, update descriptor set with template и тд, в думе этого нет.
И эта презентация 2016 года.

#21
19:32, 20 дек. 2018

/A\
> update descriptor set with template
не нашел этого в их доке

#22
19:45, 20 дек. 2018

0r@ngE
> не нашел этого в их доке
Я пару месяцев назад с рендер доком смотрел.
Хотя update descritpor set with template вообще не сложно добавить)
Но вот как они кэшируют команд буферы и не ошибаются с синхронизациями намного интереснее.

#23
20:26, 20 дек. 2018

Вот написал бы статейку, с примерами, цены б тебе не было.

#24
21:26, 20 дек. 2018

0r@ngE
> Вот написал бы статейку, с примерами, цены б тебе не было.
О чем?
Те кто пишут на вулкане и так во многом разберутся.
А в том что посложнее надо самому разобрать все нюансы прежде чем статью писать.

#25
21:47, 20 дек. 2018

/A\
> VulkanLoader - моя версия загрузчика функций вулкана, из плюсов:
https://github.com/zeux/volk

#26
21:51, 20 дек. 2018

фреймграф не очень понятно какую проблему решает - минимизации числа барьеров? вроде как что в вулкане что в дх12 они про странное железо амд, а у остальных вендоров большая часть затычечная кроме случаев rt->tex и им подобных. у дайса вроде фреймграф был про экономию памяти на всякие firenforget рендер таргетах которые живут только внутри кадра? но могу что-то путать

#27
22:06, 20 дек. 2018

kas
Я сначала использовал volk, уже не помню из-за чего решил написать свой, но это заняло пару часов и теперь меньше зависимостей.

Фреймграф нужен чтоб размещать барьеры максимально эффективно.
Оптимизация по памяти на вулкане еще проще, так как можно биндить разные рендер таргеты на одну и ту же память, просто нельзя одновременно ее использовать. В однопоточной версии я уже начал делать такую оптимизацию, но потом перешел на многопоточность и придется заново все продумывать, но загатовка под это есть, там в состояниях есть флаги invalidate before, clear before, invalidate after. Еще для мобилок можно использовать transient attachment чтоб память выделялась только в кэше.
Была идея использовать фреймграф для автоматизации сборки рендерпассов, но тогда нужно делать несколько вариантов шейдеров и желательно это автоматизировать.

#28
22:48, 20 дек. 2018

/A\
> Фреймграф нужен чтоб размещать барьеры максимально эффективно.
я к тому - есть какаято инфа о немеряном оверхеде барьеров? просто проблема памяти реальная, а эта - выглядит немного искуственной

#29
23:10, 20 дек. 2018

/A\
> уже не помню из-за чего решил написать свой
Это NIH синдром, это нормально. Хотя я сам юзаю Volk и очень доволен. Тем более что Арсений вполне отзывчив и легко идет навстречу.

Страницы: 1 2 3 49 Следующая »
ФлеймФорумПроЭкты