Войти
ПрограммированиеФорумГрафика

DX11 (65 стр)

Страницы: 161 62 63 64 65 66 Следующая »
#960
17:55, 21 авг. 2016

innuendo
> Отчасти он прав, изменения констант в PS могут на некоторых платформах
> приводить к перекомпиляции шейдера (из байткода в нативный ).
Но это же один раз. Дальше шейдер кешируется. Ну и то же самое может происходить при установки констант в вершинный шейдер.

Andrey
> Возможно на современном железе и с использованием Direct3D11/Direct3D12
> ситуация иная.
Иная. Там нельзя константы по 1 ставить.

Andrey
> Я лично убрал установку констант в пиксельный шейдер, в большинстве, случаев их
> можно передать через вершинный.
Ты же понимаешь, что теперь гпу больше нагружен, т.к. ему нужно интерполировать эти константы при рендере каждого примитива.


#961
18:08, 21 авг. 2016

MrShoor
>> Возможно на современном железе и с использованием Direct3D11/Direct3D12
>> ситуация иная.
>Иная. Там нельзя константы по 1 ставить.
В той таблице цена за 1 константу. Очевидно цена возрастает с увеличением числа констант.
> Ты же понимаешь, что теперь гпу больше нагружен, т.к. ему нужно интерполировать эти константы при рендере каждого примитива.
Однако цена передачи констант в пиксельный шейдер может быть больше.

#962
18:24, 21 авг. 2016

Andrey
> В той таблице цена за 1 константу. Очевидно цена возрастает с увеличением числа
> констант.
В dx10 и выше нет понятия установить константу. Есть понятие установить константный буфер. Все одиночные константы попадают в 1 буфер, в $Global.

Andrey
> Однако цена передачи констант в пиксельный шейдер может быть больше.
А как их можно сравнивать вообще? Передача из вершинного в пиксельный - это работа GPU, установка констант в пиксельный - это работа CPU. Кроме того, переча констант через вершинный лишает тебя статик бранчинга в пиксельном.

#963
20:51, 21 авг. 2016

MrShoor
> Есть понятие установить константный буфер. Все одиночные константы попадают в 1 буфер, в $Global.
Все верно. Таким образом уменьшилось цена передачи констант в любой шейдер со стороны CPU, ведь выставить буфер быстрее нежели вызов Set*Constant*
MrShoor
> А как их можно сравнивать вообще? Передача из вершинного в пиксельный - это работа GPU, установка констант в пиксельный - это работа CPU.
Можно но не совсем явно,нужно выбрать что будет быстрее для конкретной задачи или передавать в пиксельный или в вершинный.

#964
20:55, 21 авг. 2016

Andrey
> или передавать в пиксельный или в вершинный.
Ты работал с другими шейдерами ?

#965
21:00, 21 авг. 2016

Andrey

Очень хорошо, и каким же способом ты сделаешь так, чтобы не пересылать то,  что не меняется ?

#966
21:10, 21 авг. 2016

innuendo
> Очень хорошо, и каким же способом ты сделаешь так, чтобы не пересылать то,  что не меняется ?
Очевидно смотреть за изменением констант, разбить константы на группы по частоте обновления, что-бы не терять производительность при засылке полной группы, если изменилась меньшая часть. Но все же, тут особо можно не выиграть, если размер буфера не большой, усложниться только реализация шейдерной системы, хотя можно как минимум сделать проверку для 1 буфера, если ничего не изменилось, не слать его повторно.

#967
21:23, 21 авг. 2016

Andrey
> Очевидно смотреть за изменением констант, разбить константы на группы по
> частоте обновления, что-бы не терять производительность при засылке полной
> группы, если изменилась меньшая часть

Пример покажи

#968
21:27, 21 авг. 2016

innuendo
> Пример покажи
зачем? не понятно рассказал? Ведь идея тривиальная, но рабочая.

#969
23:08, 21 авг. 2016

Andrey
> Очевидно смотреть за изменением констант, разбить константы на группы по
> частоте обновления, что-бы не терять производительность при засылке полной
> группы, если изменилась меньшая часть. Но все же, тут особо можно не выиграть,
> если размер буфера не большой, усложниться только реализация шейдерной системы,
> хотя можно как минимум сделать проверку для 1 буфера, если ничего не
> изменилось, не слать его повторно.
Но полностью избавляться от установки пиксельных констант нет смысла. Если ботлнек в ГПУ - то только проиграешь. + Теряешь статик бранчинг в пиксельном, что тоже не весело.

#970
11:24, 22 авг. 2016

Andrey
> Ведь идея тривиальная, но рабочая.

Ну так покажи, если она рабочая. На словах мы все герои

> хотя можно как минимум сделать проверку для 1 буфера, если ничего не
> изменилось, не слать его повторно.

Молодец, ты почти изобрёл uniform в glsl :)

#971
14:35, 22 авг. 2016

Andrey
> Я лично убрал установку констант в пиксельный шейдер, в большинстве, случаев их
> можно передать через вершинный.

А, из крайности в крайность - заполнить интерполяторы до отказа ?

#972
9:28, 23 авг. 2016

Andrey
> Все верно. Таким образом уменьшилось цена передачи констант в любой шейдер со
> стороны CPU, ведь выставить буфер быстрее нежели вызов Set*Constant*

Есть у тебя cbuffer на 128 float4, изменились 10 и 101 константа - покажи как ты передаешь ?

#973
9:57, 23 авг. 2016

innuendo
> Есть у тебя cbuffer на 128 float4, изменились 10 и 101 константа - покажи как ты передаешь ?
Не нужно писать такой буфер и шейдер. Вершинный шейдер и cbuffer  к нему разрабатывается с учетом обновления констант, лучше разбить на 2 буфера. Эти 2 изменяемые константы будут в отдельном буфере, он будет ставиться чаще.

#974
10:01, 23 авг. 2016

Andrey
> Не нужно писать такой буфер и шейдер. Вершинный шейдер и cbuffer к нему
> разрабатывается с учетом обновления констант, лучше разбить на 2 буфера. Эти 2
> изменяемые константы будут в отдельном буфере, он будет ставиться чаще.

Причём тут тип шейдера ? У меня сложный супер-пупер-дупер шейдер ( не важно какой). На каких-то кадрах обновляется почти весь, на каких-то только 5 % этого буфера.

P.S. Когда ты покажешь как у тебя в движке передаются константы?

Страницы: 161 62 63 64 65 66 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.