Увеличивает ли использование VBO и VAO производительность в интегрированных чипах с общей памятью - PullRequest
0 голосов
/ 10 сентября 2018

В нашем текущем проекте мы используем этот интегрированный чип Intel . Даже в спецификации сказано, что поддерживается OGL ES 2.0, мы не использовали VBO и VAO (без glGenBuffers, glBindBuffers) и, следовательно, мы использовали буферизацию вершин на стороне клиента.

Мы пришли к мысли, что если мы будем использовать VBO, у нас будет лучшая производительность. Но сейчас я думаю об этом; если GPU и CPU уже совместно используют одну и ту же память, используя VBO, то какая-то разница. Потому что, на мой взгляд, VBO помогает, потому что нам не нужно каждый раз передавать данные в GPU, но в этом случае, когда память распределяется, я не уверен, будет ли это иметь какое-то значение.

У меня вопрос к моему оборудованию, в котором используется общая память, использование VBO повысит производительность или нет? И если есть разница в производительности VBO между интегрированными чипами и разделением cpu и gpu, что они?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

С вершинами на стороне клиента драйвер в лучшем случае должен выделять некоторое пространство и копировать вершины, потому что он должен допускать возможность того, что клиент изменит данные до того, как GPU использует вершины.

С VBO в лучшем случае эту копию можно пропустить, а для VBO, которые никогда не меняются, можно предположить, что вы получите повышение производительности (хотя, возможно, и небольшое).

Однако для вершин, которые постоянно меняются (например, система частиц, управляемая процессором, или динамически генерируемые квадраты для шрифтов / huds), может быть немного сложно эффективно использовать VBO. Вам нужно использовать какую-то стратегию для повторного использования буферов (потеря сирот, двойная буферизация, тройная буферизация, GL_MAP_INVALIDATE_BUFFER_BIT), и любой вариант, который вы выберете, на удивление плохо работает на некоторых подмножествах устройств Android. Для постоянно меняющихся вершин клиентские вершины могут быть не самыми лучшими, но, по крайней мере, они редко представляют собой черную дыру в производительности.

0 голосов
/ 10 сентября 2018

По моему мнению, использование VBO / VAO не имеет недостатков и является текущим способом сделать это.

https://www.khronos.org/opengl/wiki/Client-Side_Vertex_Arrays

"До VBO существовали простые старые массивы вершин. Это означает, что ваши вершины, атрибуты и индексы вершин находятся в ОЗУ. Конечно, это не дает наилучшей производительности, поскольку каждый раз, когда вы хотите, чтобы GL рисовал, драйвер должен загрузить вершины в графический процессор. "

Тем не менее, OpenGL - это всего лишь спецификация, поэтому в конечном итоге все зависит от того, как ваш драйвер реализует их.

...