Andrey
> Еще бы потестить GL_ARB_sampler_buffer_objects/GL_ARB_multibind
Ты хоть понимаешь, что себя конкретно так подставляешь ? :)
Синдром загрузки за 1 вызов не отпускает ?
CD
dmitryhryppa
поправил - должно работать
Andrey
>Вылетает на Intel HD 4000:
>WARNING: 0:2: '#extension' : 'GL_EXT_bindable_uniform' is not supported
интересно)
легаси конечно, но блин... Intel ужасен
к слову, у нас есть статистика по карточкам - интелом очень многие пользуются
вот кстати лог от CD
CPU: Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz
GPU: GeForce GTX 760/PCIe/SSE2
Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200
---States changing time:
SIMPLE_DIPS_TEST 0.13
FBO_CHANGE_TEST 1.12
SHADERS_CHANGE_TEST 1.40
VBO_CHANGE_TEST 0.22
ARRAY_OF_TEXTURES_TEST 0.96
TEXTURES_ARRAY_TEST 0.21
UNIFORMS_SIMPLE_CHANGE_TEST 0.72
UNIFORMS_SSBO_TEST 2.70
---API call cost:
glBindFramebuffer: 5.48 4135%
glUseProgram: 1.27 957%
glBindVertexArray: 0.09 68%
glBindTexture: 0.14 103%
glDrawRangeElements: 0.13 100%
glUniform4fv: 0.06 44%
---Instancing time:
UBO_INSTANCING 2.19
TBO_INSTANCING 5.60
SSBO_INSTANCING 2.23
VBO_INSTANCING 2.17
TEXTURE_INSTANCING 2.19
UNIFORMS_INSTANCING 5.93
MULTI_DRAW_INDIRECT_INSTANCING 208.57
Интересно
glBindVertexArray: 0.09 68%
glBindTexture: 0.14 103%
ну и - очень странный инстансинг
barnes
GPU: GeForce GTX 690/PCIe/SSE2
glBindVertexArray: 0.09 74%
glBindTexture: 0.17 131%
инстансинг 2.5 ms+
dmitryhryppa
GPU: GeForce GTX 970/PCIe/SSE2
glBindVertexArray: 0.10 87%
glBindTexture: 0.15 134%
инстансинг 2.38 ms+
CD
GPU: GeForce GTX 760/PCIe/SSE2
glBindVertexArray: 0.09 68%
glBindTexture: 0.14 103%
инстансинг 2.2 ms+
Andrey
GPU: AMD Radeon R7 200 Series
glBindVertexArray: 1.00 372%
glBindTexture: 0.77 285%
Дешевый инстансинг 0.5-0.7 ms
Джек Аллигатор
GPU: AMD Mobility Radeon HD 5000 Series
glBindVertexArray: 0.72 175% 0.97 162%
glBindTexture: 0.62 152% 0.87 145%
инстансинг 0.2-0.3 ms
_Wizard_
GPU: AMD Radeon (TM) R9 380 Series
glBindVertexArray: 0.55 268%
glBindTexture: 0.48 232%
инстансинг 0.15-0.2 ms
сильно разнятся показания)
на GeForce'ах сильно дешевле glBindVertexArray и glBindTexture чем на Radeon'ах, но при этом в 5-10 раз дороже инстансинг
остальные показания вроде +- сходятся
с glMultiDrawElementsIndirect надо разобраться еще...
_Wizard_
> вот кстати лог от CD
>
> GPU: GeForce GTX 760/PCIe/SSE2
> ---Instancing time:
> UBO_INSTANCING 2.19
> TBO_INSTANCING 5.60
> SSBO_INSTANCING 2.23
VBO_INSTANCING 2.17
> TEXTURE_INSTANCING 2.19
> UNIFORMS_INSTANCING 5.93
>ну и - очень странный инстансинг
Что странного? Однако на nVidia через gl_InstanceID медленнее? Весь мир перевернулся!
Кстати, если вместо glMapBuffer(Target, GL_WRITE_ONLY) memcpy/ unmap использовать glBufferSubData в функции update_instancing_buffers, также буфер создать immutable, через GL_ARB_buffer_storage, может чуток шустрее будет?
Все-же стоит обратить внимание на следующее "it may be able to make certain assumptions or apply particular optimizations in order to increase performance or reliability."
_Wizard_
960 GTX
CPU: Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
GPU: GeForce GTX 960/PCIe/SSE2
Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200
---States changing time:
SIMPLE_DIPS_TEST 0.08
FBO_CHANGE_TEST 0.97
SHADERS_CHANGE_TEST 1.07
VBO_CHANGE_TEST 0.15
ARRAY_OF_TEXTURES_TEST 0.74
TEXTURES_ARRAY_TEST 0.17
UNIFORMS_SIMPLE_CHANGE_TEST 0.56
UNIFORMS_SSBO_TEST 0.21
---API call cost:
glBindFramebuffer: 4.77 5823%
glUseProgram: 0.99 1203%
glBindVertexArray: 0.07 83%
glBindTexture: 0.11 133%
glDrawRangeElements: 0.08 100%
glUniform4fv: 0.05 58%
---Instancing time:
UBO_INSTANCING 1.90
TBO_INSTANCING 2.22
SSBO_INSTANCING 1.88
VBO_INSTANCING 1.84
TEXTURE_INSTANCING 1.87
UNIFORMS_INSTANCING 4.99
MULTI_DRAW_INDIRECT_INSTANCING 4.75
Исправление Crash на Intel HD 4000
Исправил Crash на Intel HD 4000.
Изменил GL_EXT_bindable_uniform на GL_ARB_uniform_buffer_object, поставил проверку на валидность шейдеров при отсутствии поддержки GL_ARB_shader_storage_buffer_object
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.18
FBO_CHANGE_TEST 0.56
SHADERS_CHANGE_TEST 2.49
VBO_CHANGE_TEST 0.73
ARRAY_OF_TEXTURES_TEST 2.41
TEXTURES_ARRAY_TEST 0.44
UNIFORMS_SIMPLE_CHANGE_TEST 0.61
UNIFORMS_SSBO_TEST 0.00
---API call cost:
glBindFramebuffer: 2.62 1440%
glUseProgram: 2.30 1267%
glBindVertexArray: 0.55 301%
glBindTexture: 0.37 204%
glDrawRangeElements: 0.18 100%
glUniform4fv: 0.04 23%
---Instancing time:
UBO_INSTANCING 0.05
TBO_INSTANCING 0.24
SSBO_INSTANCING 0.00
VBO_INSTANCING 0.10
TEXTURE_INSTANCING 0.07
UNIFORMS_INSTANCING 25.08
MULTI_DRAW_INDIRECT_INSTANCING 28.08
Andrey
> Старое расширение, видно Intel не успел его поддержать и сразу сделал UBO.
Да, старое, я делал на нём инстансинг ещё в конце 2007, а ты когда делал инстансинг ?
Обновил драйвер и некоторые значения ускорилось
CPU: Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz
GPU: GeForce GTX 970/PCIe/SSE2
Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200
---States changing time: Было Новый драйвер
SIMPLE_DIPS_TEST 0.11 0.12
FBO_CHANGE_TEST 1.28 1.18
SHADERS_CHANGE_TEST 2.04 1.40
VBO_CHANGE_TEST 0.22 0.22
ARRAY_OF_TEXTURES_TEST 1.04 0.97
TEXTURES_ARRAY_TEST 0.23 0.20
UNIFORMS_SIMPLE_CHANGE_TEST 0.75 0.59
UNIFORMS_SSBO_TEST 3.02 2.82
---API call cost:
glBindFramebuffer: 6.29 5481% 5.78 4963%
glUseProgram: 1.93 1679% 1.28 1103%
glBindVertexArray: 0.10 87% 0.10 85%
glBindTexture: 0.15 134% 0.14 121%
glDrawRangeElements: 0.11 100% 0.12 100%
glUniform4fv: 0.06 55% 0.05 41%
---Instancing time:
UBO_INSTANCING 2.38 2.26
TBO_INSTANCING 4.37 3.65
SSBO_INSTANCING 2.41 2.28
VBO_INSTANCING 2.38 2.28
TEXTURE_INSTANCING 2.40 2.30
UNIFORMS_INSTANCING 6.11 5.90
MULTI_DRAW_INDIRECT_INSTANCING 247.24 255.08 (Тут ошибка в логе: Message:GL_INVALID_OPERATION error generated. Zero bound to DRAW_INDIRECT_BUFFER.)
По выложенным тестам явно прослеживается сильная зависимость от CPU, надо было i7 покупать :D
Andrey
>Что странного? Однако на nVidia через gl_InstanceID медленнее? Весь мир перевернулся!
чувак, в 10 раз дороже, чем на радеонах !
на интеле вообще все шикарно с инстансингом, судя по твоим замерам
там всего то 100 дипов, и получаем 2.5 ms. ... ну ок, ладно - 100к инстансов отрисовали
надо кстати померить с уменьшенным количеством инстансов... в 100 раз
есть некая вероятность, что что-то не так мерим - хотя я обернул таймером только сам тест а не весь кадр
>Исправил Crash на Intel HD 4000.
спасибо, погляжу
_Wizard_
> чувак, в 10 раз дороже, чем на радеонах !
> на интеле вообще все шикарно с инстансингом
Спарведливости ради, дело ведь не только в карточке
Там еще явная записимость от CPU, при чем сильная
Вот у innuendo 960 GTX быстрее моей 970, но у него проц i7-4790K, а у меня i5-4590
_Wizard_
> чувак, в 10 раз дороже, чем на радеонах !
а ты вот про что, да nVidia давно сдулася, только фанаты зеленых переплачивают за бренд :) к примеру Direct3D 12/Vulkan лучше для GCN :)
Ну и все-же раз уж делал много разных сравнений и замеров можешь запилить сравнение несколько glTexParameterX vs GL_ARB_sampler_buffer_objects и установку нескольких текстур vs GL_ARB_multibind ?
Andrey
> Ну и все-же раз уж делал много разных сравнений и замеров можешь запилить
> сравнение несколько glTexParameterX vs GL_ARB_sampler_buffer_objects и
> установку нескольких текстур vs GL_ARB_multibind ?
Какие ещё оптимизации ты знаешь ? Желательно с реальных проектов :)
Andrey
> а ты вот про что, да nVidia давно сдулася, только фанаты зеленых переплачивают
> за бренд :) к примеру Direct3D 12/Vulkan лучше для GCN
Ты знаешь какая поддержка разрабов у Nvidia ?
CPU: Intel(R) Core( TM) i5-4460 CPU @ 3.20GHz GPU: AMD Radeon R9 200 Series Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200 ---States changing time: SIMPLE_DIPS_TEST 0.19 FBO_CHANGE_TEST 1.34 SHADERS_CHANGE_TEST 2.45 VBO_CHANGE_TEST 0.74 ARRAY_OF_TEXTURES_TEST 2.98 TEXTURES_ARRAY_TEST 0.71 UNIFORMS_SIMPLE_CHANGE_TEST 1.10 UNIFORMS_SSBO_TEST 0.65 ---API call cost: glBindFramebuffer: 6.49 3352% glUseProgram: 2.25 1163% glBindVertexArray: 0.55 283% glBindTexture: 0.46 240% glDrawRangeElements: 0.19 100% glUniform4fv: 0.09 46% ---Instancing time: UBO_INSTANCING 0.14 TBO_INSTANCING 0.52 SSBO_INSTANCING 0.16 VBO_INSTANCING 0.15 TEXTURE_INSTANCING 0.17 UNIFORMS_INSTANCING 5.57 MULTI_DRAW_INDIRECT_INSTANCING 6.35
поправил код:
1. похоже drawIndirect я сделал не правильно. Передавать напрямую информацию о дипах было не правильно. Нужно было заполнять GL_DRAW_INDIRECT_BUFFER
Тайминг сильно изменился. Так что можно перемерить конкретно MULTI_DRAW_INDIRECT_INSTANCING
2. с исправлениями от Andrey
- ubo_instancing fix
- проверка SSBO перед использованием...
3. Заметил, что спамится много ненужного в лог, возможно это тормозит/сильно влияет на тайминги... так что сделал 2 exe, с включенным и выключенным debug output
Без дебага (какой-то глюк вероятно):
CPU: Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz GPU: GeForce GTX 760/PCIe/SSE2 Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200 ---States changing time: SIMPLE_DIPS_TEST 0.01 FBO_CHANGE_TEST 0.00 SHADERS_CHANGE_TEST 0.03 VBO_CHANGE_TEST 0.01 ARRAY_OF_TEXTURES_TEST 0.09 TEXTURES_ARRAY_TEST 0.03 UNIFORMS_SIMPLE_CHANGE_TEST 0.19 UNIFORMS_SSBO_TEST 0.41 ---API call cost: glBindFramebuffer: 0.00 38% glUseProgram: 0.02 126% glBindVertexArray: 0.00 18% glBindTexture: 0.01 108% glDrawRangeElements: 0.01 100% glUniform4fv: 0.02 139% ---Instancing time: UBO_INSTANCING 0.00 TBO_INSTANCING 0.01 SSBO_INSTANCING 0.01 VBO_INSTANCING 0.00 TEXTURE_INSTANCING 0.01 UNIFORMS_INSTANCING 0.86 MULTI_DRAW_INDIRECT_INSTANCING 0.96
Без дебага №2
CPU: Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz GPU: GeForce GTX 760/PCIe/SSE2 Parameters: CURRENT_NUM_INSTANCES 1000 NUM_FBO_CHANGES 200 ---States changing time: SIMPLE_DIPS_TEST 0.12 FBO_CHANGE_TEST 1.11 SHADERS_CHANGE_TEST 1.41 VBO_CHANGE_TEST 0.20 ARRAY_OF_TEXTURES_TEST 0.96 TEXTURES_ARRAY_TEST 0.21 UNIFORMS_SIMPLE_CHANGE_TEST 0.60 UNIFORMS_SSBO_TEST 0.20 ---API call cost: glBindFramebuffer: 5.42 4632% glUseProgram: 1.29 1105% glBindVertexArray: 0.09 74% glBindTexture: 0.14 119% glDrawRangeElements: 0.12 100% glUniform4fv: 0.05 41% ---Instancing time: UBO_INSTANCING 2.18 TBO_INSTANCING 5.39 SSBO_INSTANCING 2.25 VBO_INSTANCING 2.22 TEXTURE_INSTANCING 2.25 UNIFORMS_INSTANCING 6.00 MULTI_DRAW_INDIRECT_INSTANCING 0.57
С дебагом:
Предыдущая версия с дебагом:
Тема в архиве.