После обновления до Mavericks My Software OpenGL запускает вершинный шейдер на CPU
-
20-12-2019 - |
Вопрос
У меня есть большое программное обеспечение C ++ OpenGL, которое работало с очень высокой производительностью под горным львом. После обновления до Mavericks и перекомпиляция производительность значительно упала. Путем переключения между треугольными полосками и треугольниками в качестве визуализации типа объекта и просмотра падения производительности еще одним фактором 2 или 3, я нахожусь под впечатлением, что вершинский шейдер должен быть причиной проблемы и учитывая, насколько простоЯ подозреваю, что он работает в программном обеспечении на CPU, а не на графическом процессе. Как я могу восстановить производительность, которые у меня было под горным львом?Есть ли некоторые изменения, которые мне нужно сделать?
Источник моего вершинного шейдера приведен ниже.Он подает следующий геометрический шейдер.
#version 410
uniform mat3 normalMatrix;
uniform mat4 modelMatrix;
uniform mat4 modelProjMatrix;
uniform vec3 color = vec3(0.4,0.4, 0.4);
in vec3 vertex;
in vec3 normal;
out NodeData {
vec3 normal, position;
vec4 refColor;
} v;
void main()
{
vec4 position = modelMatrix * vec4(vertex, 1.0);
vec3 vertNormal = normal;
v.normal = normalize(normalMatrix * vertNormal);
v.position = position.xyz;
v.refColor = vec4(color, 1.0);
gl_Position = modelProjMatrix * vec4(vertex, 1.0);
}
.
Для 180 000 треугольников я могу получить 3FP, только при кормлении как треугольники и около 8, когда кормятся как полоски.Треугольник упорядочен в соответствии с алгоритмом оптимизации Forsyth для оптимизации кеша после преобразования.
Решение
Решение: убедитесь, что все векторные буферы, которые добавляются в VAO, используются в вершине.