Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / OpenGL. Constant Buffer для бедных. (3 стр)

OpenGL. Constant Buffer для бедных. (3 стр)

Страницы: 1 2 3 4 5 6 Следующая »
snake32Постоялецwww1 мар. 201815:50#30
g-cont
> Очереди команд, это может в Вулкане такое имеется, либо в последних версиях GL.
Если к ней нет доступа через API это ещё не значит что её там нет
innuendoПостоялецwww9 мар. 201810:43#31
так что в итоге, точно получилось что UBO медленней чем uniforms ?
desssПостоялецwww9 мар. 201814:01#32
innuendo
> так что в итоге, точно получилось что UBO медленней чем uniforms ?
Я на эту информацию еще несколько лет назад натыкался:
https://www.gamedev.net/forums/topic/655969-speed-gluniform-vs-un… ffer-objects/
https://devtalk.nvidia.com/default/topic/752037/ubo-performance/

Кажется синхронизацию UBO нужно самому менеджить, чтобы было не медленнее, чем glUniform.

Правка: 9 мар. 2018 14:41

innuendoПостоялецwww9 мар. 201814:53#33
desss

Не только лишь все могут понять всю глубину глубин

WraithПостоялецwww10 мар. 20188:57#34
На андроедах UBO медленней, чем glUniform4fv - это обычное дело.

Правка: 10 мар. 2018 8:57

innuendoПостоялецwww10 мар. 201810:18#35
Wraith
> На андроедах UBO медленней, чем glUniform4fv - это обычное дело.

это проблема самой железки или баг драйвера?

DampireПостоялецwww10 мар. 201810:56#36
Я короче собрал два стресс-билда. 3.5к дипов и вот это все. С UBO работает просто в разы медленнее.
И да, кейс у меня как раз:
> (2) You have a single small UBO that all objects share. It's bound once during startup. To draw an object you update the UBO, then draw. You have a single UBO bind at startup, but 1000 UBO updates per frame. This is going to run slow.
Один UBO пишется per frame, второй UBO пишется per object. С юниформами, очевидно, так же.
Вывод статистики по F1. Своей мерилке ms я не доверяю, она багнутая и мне лень разбираться почему. Для точности нужен bandicam или еще какой fraps. Есть кап фпсов, поэтому после первого запуска ходим %APPDATA%/Hermodr/config.conf и меняем targetFrameRate 100 на targetFrameRate 0.

https://yadi.sk/d/j8rEaYpV3TCmju

Правка: 10 мар. 2018 11:02

DampireПостоялецwww10 мар. 201811:10#37
Wraith
> На андроедах UBO медленней, чем glUniform4fv - это обычное дело.
А как vec4[] конвертнуть в mat4? Я вообще и взял mat4[] только потому, что проще задефайнить, но переголова по объему данных солидная местами.
innuendoПостоялецwww10 мар. 201812:10#38
Dampire
> С UBO работает просто в разы медленнее.

Очень подозрительно

DampireПостоялецwww10 мар. 201812:18#39
Это вся разница в коде рендера. Больше там ничего не отличается, только один доп параметр в функции рендера, сообщающий размер per frame буфера.
// glBindBuffer(GL_UNIFORM_BUFFER, Device::uniformBuffer = buf);
// glBufferSubData(GL_UNIFORM_BUFFER, uniforms[index].offset, uniforms[index].size, data);
ConstantBuffer::Update(poBuffer, (perObject + perObjectSize * i));
// vs
glUniformMatrix4fv(poBuffer, perObjectSize / 16, false, (perObject + perObjectSize * i));

Если хочется посмотреть на лютый говнокод целиком, то пожалуйста. Перед судом Линча хотелось бы уточнить, что это писалось для вызова из C#, поэтому голые данные, страйды и в целом Ад и Израиль.
https://pastebin.com/P7bhZitc

Правка: 10 мар. 2018 12:26

barnesПостоялецwww10 мар. 201812:37#40
innuendo
> Очень подозрительно
Почему? синхронизация...
WraithПостоялецwww10 мар. 201812:40#41
innuendo
> это проблема самой железки или баг драйвера?
Вопрос лишен смысла. Других железок нет, других драйверов нет, заменить нельзя.
Населена роботами.

Dampire
> А как vec4[] конвертнуть в mat4? Я вообще и взял mat4[] только потому, что
> проще задефайнить, но переголова по объему данных солидная местами.
ну mat4 matrix = mat4( params[33], params[34], params[35], params[36] ); наверное у всех работает

Правка: 10 мар. 2018 12:45

DampireПостоялецwww10 мар. 201812:47#42
Wraith
Мне дефайнами как-то удобнее. Оставлю как есть тогда.
Fantom09Постоялецwww10 мар. 201814:56#43
Dampire
> Я короче собрал два стресс-билда. 3.5к дипов и вот это все. С UBO работает
> просто в разы медленнее.
UBO нужен для шаринга статических данных между шейдерами/объектами а не чтоб заменить юниформы.
К примеру - поместить туда матрицу проекции, матрицу вида, нормальную матрицу, поместить туда позиции источников света, свойства материалов и прочие данные, которые шарятся между всеми объектами (и еще реже обновляются).

Увы, в твоем примере не видно какой объем данных передается, не видно сколько из этих данных относятся к сцене а сколько к объектам, не понятно на сколько вообще оправдано там использование UBO. Судя по примеру - у тебя используется один шейдер для вывода всей пачки объектов, тут UBO бесполезен по определению, если не идет речь о передаче большого количества статических данных в шейдер, которые нельзя впихнуть в юниформы или которые не требуют обновления каждый кадр. Судя по всему - это не твой случай, а юзать их как замену бинда пачки юниформ - ну это как микроскопом гвозди забивать, не предназначен он для этого.

Опять же, не понятно где именно у тебя идет просадка - на обновлении буфера UBO или непосредственно на чтении этих данных в шейдере. Не понятно как обновляется сам UBO.

Да, доступ к элементам буфера однозначно медленнее прямого чтения из регистров, тут никто не спорит, но это микросекунды, это можно заметить только в синтетических тестах, в реальных сценах это просадка порядка 0.01% а то и ниже.

DampireПостоялецwww10 мар. 201815:00#44
Fantom09
> Опять же, не понятно где именно у тебя идет просадка - на обновлении буфера UBO
> или непосредственно на чтении этих данных в шейдере. Не понятно как обновляется
> сам UBO.
Код приведен, с чтенем проблемы? Данные в UBO обновляются на каждый объект через буферсабдата. Если бы отвлекся от написания "очень умных" ответов и посмотрел тред сначала, то увидел бы и объемы данных и то ради чего все изначально затевалось и вообще о чем идет разговор.

Правка: 10 мар. 2018 15:02

Страницы: 1 2 3 4 5 6 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр