0xc0de
> (VNCVNCVNCVNC)
если тебе не нужно постоянно обновлять какой-то отдельный атрибут.
Aroch
> (VNCVNCVNCVNC)
> если тебе нужно постоянно обновлять какой-то отдельный атрибут.
Предположим, что данные не обновляются.
0xc0de
> Предположим, что данные не обновляются.
там опечатка была. Так что в твоем случае VNC вариант оптимальный.
(VVVVNNNNCCCC) - такой вариант вроде бы лучше для кэша. Шейдер выполняется параллельно, поэтому сначала прочитается 32 (размер варпа) вершины, умножится на матрицу, потом прочитаются 32 текстурные координаты и тд.
Но как там написано все зависит от железа и драйвера.
У самсунга есть оптимизация, где они сначала рассчитывают позицию, делают кулинг, а потом уже остальную часть вершинного шейдера выполняют, поэтому рекомендуют позицию хранить отдельно от остальных атрибутов (VVVV) (NNNNCCCC)
CPU: Intel(R) Core( TM) i7-6950X CPU @ 3.00GHz GPU: GeForce GTX 980 Ti/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.55 FBO_CHANGE_TEST 1.54 SHADERS_CHANGE_TEST 2.15 VBO_CHANGE_TEST 0.63 ARRAY_OF_TEXTURES_TEST 1.57 TEXTURES_ARRAY_TEST 0.69 UNIFORMS_SIMPLE_CHANGE_TEST 0.95 UNIFORMS_SSBO_TEST 0.56 ---API call cost: glBindFramebuffer: 7.15 1300% glUseProgram: 1.60 290% glBindVertexArray: 0.08 13% glBindTexture: 0.17 30% glDrawRangeElements: 0.55 100% glUniform4fv: 0.04 7% ---Instancing time: cpu time ( gpu time) num instances 50 100 200 UBO_INSTANCING 0.56 ( 0.06) 0.69 ( 0.11) 0.82 ( 0.20) TBO_INSTANCING 2.47 ( 2.28) 2.56 ( 2.34) 2.73 ( 2.49) SSBO_INSTANCING 0.58 ( 0.06) 0.69 ( 0.11) 0.84 ( 0.20) VBO_INSTANCING 0.56 ( 0.06) 0.66 ( 0.11) 0.82 ( 0.20) TEXTURE_INSTANCING 0.60 ( 0.06) 0.71 ( 0.11) 0.85 ( 0.20) UNIFORMS_INSTANCING 0.57 ( 0.06) 0.75 ( 0.11) 0.99 ( 0.44) MULTI_DRAW_INDIRECT_INSTANCING 0.53 ( 0.33) 0.56 ( 0.44) 0.72 ( 0.61)
/A\
> (VVVVNNNNCCCC) - такой вариант вроде бы лучше для кэша. Шейдер выполняется
> параллельно, поэтому сначала прочитается 32 (размер варпа) вершины, умножится
> на матрицу, потом прочитаются 32 текстурные координаты и тд.
>
> Но как там написано все зависит от железа и драйвера.
> У самсунга есть оптимизация, где они сначала рассчитывают позицию, делают
> кулинг, а потом уже остальную часть вершинного шейдера выполняют, поэтому
> рекомендуют позицию хранить отдельно от остальных атрибутов (VVVV) (NNNNCCCC)
(VVVV) (NNNNCCCC)
Такое еще кажется логично для геометрии, отбрасывающей тени, поскольку для рендера в shadowmap нужны только позиции (иногда еще и текстурные координаты).
Хряп.
Win7-64/Intel HD 3000
widows осуществляет поиск способа устранения этой ошибки ...
ага, так мы и поверили
Оправдано ли использование GS для рендера меша сразу в несколько теневых каскадов (слоев в texture array)? GS здесь чисто для установки gl_layer. Или все равно быстрее будет отрендерить по отдельности в каждый слой, нежели чем instancing+GS?
0xc0de
тесты покажут
0xc0de
> Или все равно быстрее будет отрендерить по отдельности в каждый слой, нежели
> чем instancing+GS?
Зависит от ботлнека. Без GS и с большим количеством слоёв можно легко упереться в CPU на дроуколлах.
Тема в архиве.