CD
что происходит)
у меня на Атишке только drawIndirect поправился... с дебагом и без - нет никакой разницы
ок - надо видимо замерять кадр целиком
CPU: Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
GPU: Intel(R) HD Graphics 4000
Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200
---States changing time:
SIMPLE_DIPS_TEST 0.22
FBO_CHANGE_TEST 0.54
SHADERS_CHANGE_TEST 2.34
VBO_CHANGE_TEST 0.56
ARRAY_OF_TEXTURES_TEST 2.41
TEXTURES_ARRAY_TEST 0.36
UNIFORMS_SIMPLE_CHANGE_TEST 0.61
UNIFORMS_SSBO_TEST 0.23
---API call cost:
glBindFramebuffer: 2.48 1150%
glUseProgram: 2.12 984%
glBindVertexArray: 0.34 159%
glBindTexture: 0.37 169%
glDrawRangeElements: 0.22 100%
glUniform4fv: 0.04 18%
---Instancing time:
UBO_INSTANCING 0.04
TBO_INSTANCING 0.24
SSBO_INSTANCING 0.06
VBO_INSTANCING 0.09
TEXTURE_INSTANCING 0.07
UNIFORMS_INSTANCING 24.99
MULTI_DRAW_INDIRECT_INSTANCING 79.11
Andrey
> UBO_INSTANCING 0.04
> TBO_INSTANCING 0.24
> SSBO_INSTANCING 0.06
> VBO_INSTANCING 0.09
UBO быстрее VBO в два раза ?
innuendo
>> UBO_INSTANCING 0.04
>> TBO_INSTANCING 0.24
>> SSBO_INSTANCING 0.06
>> VBO_INSTANCING 0.09
>UBO быстрее VBO в два раза ?
чет не уверен, там странные цифры - слишком маленькие
это у меня с замерами что-то не так...
я заметил, что малое количество шагов дает сильную погрешность (по крайней мере у меня на GeForce'е)
когда усредняешь 10к шагов - стабильно выдает один и тот же результат
вот мои замеры
CPU: Intel(R) Core(TM) i5-3570 CPU @ 3.40GHz
GPU: GeForce GTX 660/PCIe/SSE2
Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200
---States changing time:
SIMPLE_DIPS_TEST 0.21
FBO_CHANGE_TEST 1.88
SHADERS_CHANGE_TEST 1.95
VBO_CHANGE_TEST 0.30
ARRAY_OF_TEXTURES_TEST 1.03
TEXTURES_ARRAY_TEST 0.30
UNIFORMS_SIMPLE_CHANGE_TEST 0.84
UNIFORMS_SSBO_TEST 0.29
---API call cost:
glBindFramebuffer: 9.17 4284%
glUseProgram: 1.74 811%
glBindVertexArray: 0.09 41%
glBindTexture: 0.14 63%
glDrawRangeElements: 0.21 100%
glUniform4fv: 0.06 29%
---Instancing time:
UBO_INSTANCING 2.17
TBO_INSTANCING 2.83
SSBO_INSTANCING 2.19
VBO_INSTANCING 2.17
TEXTURE_INSTANCING 2.25
UNIFORMS_INSTANCING 5.81
MULTI_DRAW_INDIRECT_INSTANCING 2.59
DrawIndirect* съедобным стал с выключенным дебагом
хочу заметить еще раз, что это цифры в ms на 100 повторений... т.е. один DrawIndirect* такой стоит 0.026 ms. на 1к дипов !
'дешевые' относительно АТИ
glBindVertexArray: 0.09 41%
glBindTexture: 0.14 63%
самое дорогое по всем тестам - смена рендер таргета и шейдера
инстансинг - любой: UBO, SSBO, VBO, TEXTURE... TBO дороже
если что - у нас в WarThunder физика через текстуру делается (она везде работает и большая)
_Wizard_
CPU: AMD FX(tm)-4350 Quad-Core Processor
GPU: AMD Radeon R7 200 Series
Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200
---States changing time:
SIMPLE_DIPS_TEST 0.24
FBO_CHANGE_TEST 2.18
SHADERS_CHANGE_TEST 3.99
VBO_CHANGE_TEST 1.35
ARRAY_OF_TEXTURES_TEST 4.86
TEXTURES_ARRAY_TEST 1.11
UNIFORMS_SIMPLE_CHANGE_TEST 1.59
UNIFORMS_SSBO_TEST 1.04
---API call cost:
glBindFramebuffer: 10.68 4424%
glUseProgram: 3.75 1552%
glBindVertexArray: 1.10 457%
glBindTexture: 0.77 319%
glDrawRangeElements: 0.24 100%
glUniform4fv: 0.13 55%
---Instancing time:
UBO_INSTANCING 0.63
TBO_INSTANCING 0.99
SSBO_INSTANCING 0.77
VBO_INSTANCING 0.81
TEXTURE_INSTANCING 0.61
UNIFORMS_INSTANCING 8.64
MULTI_DRAW_INDIRECT_INSTANCING 1.71
Замеры прыгают от запуска к запуску.
_Wizard_
> если что - у нас в WarThunder
А, у вас же есть клиент под Linux/Mac
innuendo
>А, у вас же есть клиент под Linux/Mac
есть да - все работает... даже на NVIDIA SHIELD работает !
Вы сильно не до оценили переключение шейдеров! В моей трассировке это убило около 10-20fps.
Сраная Nvidia со своей политикой... Одни и те же переключает быстро, а на разные требуется около 10ms.
Без дебага:
CPU: Intel(R) Core(TM) i5 CPU 760 @ 2.80GHz GPU: GeForce GTX 470/PCIe/SSE2 Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200 INSTANCING_NUM_ITERATIONS 100. Time in ms. ---States changing time: SIMPLE_DIPS_TEST 0.34 FBO_CHANGE_TEST 2.56 SHADERS_CHANGE_TEST 2.56 VBO_CHANGE_TEST 0.47 ARRAY_OF_TEXTURES_TEST 1.62 TEXTURES_ARRAY_TEST 0.44 UNIFORMS_SIMPLE_CHANGE_TEST 1.12 UNIFORMS_SSBO_TEST 0.44 ---API call cost: glBindFramebuffer: 12.45 3639% glUseProgram: 2.22 647% glBindVertexArray: 0.13 36% glBindTexture: 0.21 62% glDrawRangeElements: 0.34 100% glUniform4fv: 0.08 22% ---Instancing time: cpu time (gpu time) num instances 50 100 200 UBO_INSTANCING 0.62 (0.10) 0.72 (0.17) 0.94 (0.32) TBO_INSTANCING 1.44 (0.85) 1.56 (0.91) 1.75 (1.03) SSBO_INSTANCING 0.65 (0.10) 0.75 (0.17) 0.97 (0.32) VBO_INSTANCING 0.59 (0.11) 0.72 (0.19) 0.90 (0.33) TEXTURE_INSTANCING 0.72 (0.10) 0.84 (0.17) 1.03 (0.32) UNIFORMS_INSTANCING 0.62 (0.12) 0.78 (0.23) 1.12 (0.60) MULTI_DRAW_INDIRECT_INSTANCING 0.75 (0.63) 0.94 (0.82) 1.28 (1.16)
С дебагом:
---States changing time: SIMPLE_DIPS_TEST 0.37 FBO_CHANGE_TEST 2.50 SHADERS_CHANGE_TEST 2.50 VBO_CHANGE_TEST 0.47 ARRAY_OF_TEXTURES_TEST 1.50 TEXTURES_ARRAY_TEST 0.47 UNIFORMS_SIMPLE_CHANGE_TEST 1.00 UNIFORMS_SSBO_TEST 0.53 ---API call cost: glBindFramebuffer: 12.11 3236% glUseProgram: 2.12 567% glBindVertexArray: 0.09 25% glBindTexture: 0.19 50% glDrawRangeElements: 0.37 100% glUniform4fv: 0.06 16% ---Instancing time: cpu time (gpu time) num instances 50 100 200 UBO_INSTANCING 0.62 (0.10) 0.72 (0.17) 0.94 (0.32) TBO_INSTANCING 1.40 (0.84) 1.53 (0.91) 1.75 (1.04) SSBO_INSTANCING 0.66 (0.10) 0.78 (0.17) 0.97 (0.32) VBO_INSTANCING 0.59 (0.11) 0.69 (0.18) 0.90 (0.33) TEXTURE_INSTANCING 0.72 (0.10) 0.84 (0.17) 1.00 (0.32) UNIFORMS_INSTANCING 0.62 (0.12) 0.78 (0.23) 1.15 (0.61) MULTI_DRAW_INDIRECT_INSTANCING 1.00 (0.73) 1.00 (0.90) 1.34 (1.24)
Эти 3 ms сыграли злую шутку
Zloten
> GeForce GTX 470/PCIe/SSE2
VBO_INSTANCING красота, да еще на nVidia.
Andrey
> Но не были проведены замеры таких полезных вещей как
> GL_ARB_multibind/GL_ARB_sampler_objects
Ну? Загрузка за 1 вызов ещё не отпустила?
Да, это ну очень полезная вещь ... расскажи про свой опыт оптимизаций на реальных проектах
Хм... Всё равно не пойму в чем тогда соль glMultidraw[..]Indirect раз она медленнее всех..
Как быть со связкой SSBO Instancing + динамические объекты?
Насколько "больно" обновлять весь SSBO целиком?
Laynos
>Хм... Всё равно не пойму в чем тогда соль glMultidraw[..]Indirect раз она медленнее всех.
glMultidraw* наоборот быстрее... это возможность сделать кучу glDrawElementsInstanced за 1 вызов... +можно собирать информацию о дипах на ГПУ
ты сделал 100 * INSTANCING_NUM_ITERATIONS = 10к дипов за 0.94 ms
можно за 1 раз 10к дипов сделать - еще дешевле
на секундочку, в ГТА 5 в кадре +-4,5к дипов на вообще все (на все проходы), с Думе (2016) 1300 дипов
у меня последний тест выдает
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)
Тема в архиве.