Advanced: Тема повышенной сложности или важная.
Che@ter
Подпрограммы ?
Che@ter
Не понял, там один скомпилированный шейдер (vs->...->ps) на стейт?
Правка:
Понял, там устанавливаешь один PipelineState, и на все комбинации шейдеров придется делать отдельный стейт.
Demiurg-HG
> Суть: у нас есть заданные наборы дефайнов для шейдеров, при загрузке мы
> смотрим, какие дефайны выставлены, и на основании этого настраиваем PSO.
Не хочу делать убер шейдеры. Не хочу дефайнов. Только динамическая линковка. Для вершинного шейдера совсем не важно что там делает пиксельный. Толи это материал, толи shadowmapping, толи вообще в 3д текстуру растеризирую. Для пиксельного наоборот - не хочу знать откуда берется геометрия.
Che@ter
> Не хочу делать убер шейдеры. Не хочу дефайнов. Только динамическая линковка.
> Для вершинного шейдера совсем не важно что там делает пиксельный. Толи это
> материал, толи shadowmapping, толи вообще в 3д текстуру растеризирую. Для
> пиксельного наоборот - не хочу знать откуда берется геометрия.
Тебя давно уже ждут в GL :)
innuendo
> Тебя давно уже ждут в GL :)
Только не это!
В DX11 это было возможным. Посмотрим насколько долго создаются эти bundles если придется сделать что-то подобное...
Che@ter
> Для пиксельного наоборот - не хочу знать откуда берется геометрия.
А я пошел дальше и разделил код шейдера материала и прохода рендера, то есть один и тот же код материала подойдет для forward и deferred lтехник, а они уже сами добавят нужный код. Но получается убершейдер в итоге))
Стоп. Серьёзно, Шин10?!
/A\
> то есть один и тот же код материала подойдет для forward и deferred lтехник, а
> они уже сами добавят нужный код
В DX11 опять же были введены Dynamic Shader Linkage - пишем классик материала, а кто ему данные дает - неважно.
Che@ter
> Не хочу делать убер шейдеры. Не хочу дефайнов. Только динамическая линковка.
> Для вершинного шейдера совсем не важно что там делает пиксельный. Толи это
> материал, толи shadowmapping, толи вообще в 3д текстуру растеризирую. Для
> пиксельного наоборот - не хочу знать откуда берется геометрия.
Это уже было сделано в Direct3D 9, и Direct3D 10, и Direct3D 11... только теперь это придется писать самому, а не использовать уже готовый кэш стейтов на уровне драйвера.
Ubershader — это прекрасная штука, которая позволяет перебрать все комбинации на этапе инициализации. И вообще сделать код более декларативным, что есть хорошо.
Demiurg-HG
> только теперь это придется писать самому, а не использовать уже готовый кэш
> стейтов на уровне драйвера.
То есть если этот кеш был в драйвере/гпу/не важно где, а теперь у меня, то тогда ок.
> перебрать все комбинации на этапе инициализации
Вроде и да, но время компиляции...
Che@ter
> > Тебя давно уже ждут в GL :)
> Только не это!
Зато хоть прям сейчас можешь пощупать DX12 фичи из п 0
Demiurg-HG
> Ubershader — это прекрасная штука, которая позволяет перебрать все комбинации на этапе инициализации. И вообще сделать код более декларативным, что есть хорошо.
Не ради холивара, но знаешь сколько таких комбинаций может быть. И Ubershader тяжело читать и понимать как они работают с его кучей ifdef'ов.
Лоол
Mr F
Этапять!
Mr F
Lol
Mantle - это копипаст с Directx12.
Directx12 - это копипаст с Mantle.
Vulkan API - это копипаст с Directx12 и Mantle.