Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Стоимость OpenGL команд (комментарии) (5 стр)

Стоимость OpenGL команд (комментарии) (5 стр)

Поделиться
Страницы: 1 2 3 4 5
_Wizard_Участникwww11 мар. 20171:59#60
у меня последний тест выдает
CPU: Intel(R) Core(TM) i5-4460  CPU @ 3.20GHz
GPU: AMD Radeon (TM) R9 380 Series

Parameters: CURRENT_NUM_INSTANCES 1000   NUM_FBO_CHANGES 200   INSTANCING_NUM_ITERATIONS 100. Time in ms.

---States changing time:
SIMPLE_DIPS_TEST                 0.41
FBO_CHANGE_TEST                  1.97
SHADERS_CHANGE_TEST              2.90
VBO_CHANGE_TEST                  0.95
ARRAY_OF_TEXTURES_TEST           3.27
TEXTURES_ARRAY_TEST              0.87
UNIFORMS_SIMPLE_CHANGE_TEST      1.27
UNIFORMS_SSBO_TEST               0.80

---API call cost:
glBindFramebuffer:               9.44   2314% 
glUseProgram:                    2.49   610% 
glBindVertexArray:               0.54   132% 
glBindTexture:                   0.48   116% 
glDrawRangeElements:             0.41   100% 
glUniform4fv:                    0.09   21% 

---Instancing time:
cpu time (gpu time)
num instances                       50            100           200
UBO_INSTANCING                   0.35 (0.10)   0.37 (0.13)   0.36 (0.24)
TBO_INSTANCING                   0.72 (0.11)   0.73 (0.13)   0.73 (0.25)
SSBO_INSTANCING                  0.37 (0.09)   0.40 (0.13)   0.38 (0.24)
VBO_INSTANCING                   0.36 (0.09)   0.37 (0.12)   0.37 (0.24)
TEXTURE_INSTANCING               0.38 (0.10)   0.39 (0.13)   0.39 (0.24)
UNIFORMS_INSTANCING              0.41 (0.13)   0.52 (0.27)   0.74 (0.51)
MULTI_DRAW_INDIRECT_INSTANCING   0.63 (0.53)   1.17 (1.01)   2.10 (1.93)
LaynosПостоялецwww11 мар. 201712:52#61
_Wizard_
> кучу glDrawElementsInstanced за 1 вызов... +можно собирать информацию о дипах
> на ГПУ
Ох! После вашего комента до меня дошло :)

А DIP'ы обычно считают по количеству вызовов gl...Draw... на CPU? Или по факту, сколько было на GPU?
"Batch" - количество биндингов шейдеров и буферов вместе с glMultidrawElementsIndirect?


Ещё я вот заценил код тестов... Наткнулся на

//NOTE: seems data transfering is not bottle neck

Действительно ли всё так?

И в чем смысл от GL_DRAW_INDIRECT_BUFFER, если инфа всё равно каждый раз изменяется на CPU?


Как правильно использовать .instanceCount? Например в батче лежит объект, который должен быть выведен 1000 раз. Неужели всегда придётся создавать отдельные 1000 draw_indirect_commands?

И я так посчитал... Например мы хотим сразу вывести 1'000'000 обжектов. Каждая команда - 20 байт. В итоге каждый кадр надо передавать 20*1'000'000/(1024^2) =  ~19 мб данных. То есть это произойдет почти мгновенно? А если речь о 190 мб? :)

innuendoПостоялецwww11 мар. 201712:55#62
Laynos
> И в чем смысл от GL_DRAW_INDIRECT_BUFFER, если инфа всё равно каждый раз
> изменяется на CPU?

Ты точно понимаешь смысл indirect draw?

LaynosПостоялецwww11 мар. 201712:58#63
innuendo
> Ты точно понимаешь смысл indirect draw?
Перенести gl...Draw... на GPU. Каждый вызов API OpenGL - проверка со стороны драйвера, это замедляет работу движка.
А glMultidraw - один вызов, всё остальное идет на видеокарте. AZDO или что-то там, вроде
innuendoПостоялецwww11 мар. 201713:01#64
Laynos
> Перенести gl...Draw... на GPU.

Почитай доки

_Wizard_Участникwww11 мар. 201713:42#65
Laynos
>Например в батче лежит объект, который должен быть выведен 1000 раз. Неужели всегда придётся создавать отдельные 1000 draw_indirect_commands?
нет... это у меня пример такой просто... читаем доки в общем

дипы на ЦПУ, glDraw*

>И в чем смысл от GL_DRAW_INDIRECT_BUFFER, если инфа всё равно каждый раз изменяется на CPU?
1. так надо) информация должна лежать в этом буфере. Причем оно даже работать будет если напрямую передать, но так не правильно делать - читаем спецификацию
2. можно залить туда данные 1 раз и переиспользовать (несколько кадров/проходов)
3. инфу можно готовить на ГПУ


>//NOTE: seems data transfering is not bottle neck
>Действительно ли всё так?
в данном случае, не более того...
итоговая производительность зависит от кучи всего: количества данных, с какими флагами мапить буфер, в  какой момент ты захочешь эти данные заиспользовать, какая шина у карточки...

>И я так посчитал...
1кк - очень много) но я видел похожие примеры - нормально работало

Страницы: 1 2 3 4 5

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

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