Почему производительность так отличается, когда немного измените количество итераций в GLSL для цикла на Android - PullRequest
0 голосов
/ 04 июля 2018

Сначала я записал код ниже. При запуске на Nexus 6P производительность получала всего 1 FPS.

vec4 show(vec2 start[100], vec2 end[100], int n, float scale) {
    vec4 color;
    vec2 loc = v_TexCoordinate;
    for (int i = 0; i < 4; i ++) {
        loc = real_loc(start[i], end[i], scale, loc);
    }

    color = texture2D(u_TextureA, loc);
    return (1.0 - abs(scale)) * color;
}

После этого я попытался изменить его, как показано ниже. Тогда производительность выросла до 60 FPS.

vec4 show(vec2 start[100], vec2 end[100], int n, float scale) {
    vec4 color;
    vec2 loc = v_TexCoordinate;
    for (int i = 0; i < 3; i ++) {
        loc = real_loc(start[i], end[i], scale, loc);
    }
    loc = real_loc(start[3], end[3], scale, loc);

    color = texture2D(u_TextureA, loc);
    return (1.0 - abs(scale)) * color;
}

Итак, мои вопросы: 1. Почему производительность так отличается? 2. Как написать высокопроизводительный код в GLSL? Я не могу развернуть все петли. 3. Как узнать, что компилятор действительно делает с моим кодом?

...