Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Adreno 305: OpenGL ES 3.0 UBO Linking Error

Adreno 305: OpenGL ES 3.0 UBO Linking Error

Поделиться
AndreyПостоялецwww31 окт. 201723:14#0
Привет всем!

Adreno 305, простой шейдер со скелетной анимацией ошибка линковки,  в логе

--From Vertex Shader:
Internal error.

шейдер:

#version 300 es
#define attribute in
#define varying out
#define lerp mix
#define saturate(x) clamp(x, 0.0, 1.0)
#define frac fract
#define NUM_BONES 31
#define NUM_WEIGHT 2
//

#ifndef NUM_WEIGHT 
#define NUM_WEIGHT 4
#endif

#ifndef NUM_BONES
#define NUM_BONES 47
#endif

layout(std140) uniform UBO {
  mat4 lightMatrix;
  vec4 bones[3 * NUM_BONES];
};
attribute vec4 POSITION;
attribute vec4 BLENDWEIGHT;
attribute vec4 BLENDINDICES;

varying float Depth;

void main()
{
  vec4 Pos = vec4(0.0, 0.0, 0.0, 1.0);
  vec4 position = vec4(POSITION.xyz, 1.0);
  ivec4 BoneIndices = ivec4(BLENDINDICES);
  vec4 BlendWeight = BLENDWEIGHT;
  for(int i = 0; i < NUM_WEIGHT; ++i) {
    int index = 3 * BoneIndices[i];
    vec3 pos;
    pos.x = dot(bones[index + 0], position);
    pos.y = dot(bones[index + 1], position);
    pos.z = dot(bones[index + 2], position); 
    Pos.xyz += (pos.xyz * BlendWeight[i]);
  }
  gl_Position = lightMatrix * Pos;
  Depth = gl_Position.z;
}

Собственно размер UBO значительно меньше поддерживаемого, поддерживается 65535 байт, текущий 3 * 31 * 16 + 64 = 1152

Проблем нету на Adreno 510, Mali-T720, так-же остальные шейдеры c UBO без массива vec4 линкуются корректно.

Что не так?

агрессорПостоялецwww31 окт. 201723:50#1
линкуются не означает "работают". работу проверял?
[vec4]BlendWeight при i больше 3 чего вернет?
AndreyПостоялецwww1 ноя. 20170:05#2
агрессор
> линкуются не означает "работают". работу проверял?
я писал что не линкуются, работу проверял(когда не линковались), не работает.
>[vec4]BlendWeight при i больше 3 чего вернет?
откуда там i > 3 ? вернуть может мусор.
агрессорПостоялецwww1 ноя. 20170:09#3
ну извини. букаф много, не дочитал :)
SuslikМодераторwww1 ноя. 20173:31#4
Andrey
похоже на баг реализации shader compiler'а в дровах для той железки. попробуй просто попереворачивать код: поменяй поля местами, поменяй memory layout на std430, varying замени на out location, итд.
WraithПостоялецwww1 ноя. 20177:40#5
Andrey
Гаже этих адрен ничего нет на всем мобильном рынке. У нас на них уже 5 гпу багов. Такой был - драйвер не мог номально посчитать количество используемых элементов в массиве (правда в юниформах, а не в убо), и установка тупо не ставила некоторые.

Хроническое, не лечится. Эти адрены - это квалкомовские снэпдрэгоны, - они самые массовые, стоят везде, в том числе и в самом говнистом говне. Вендоры их не фиксят, потому что либо уже разорились, либо на багамах. Даже амазон в своих киндлами не фиксят.

Купируется рандомной перестановкой юниформов пока баг не пройдет.

Решается решительным отказом работать на адренах с просьбой купить новый телефон.

innuendoПостоялецwww1 ноя. 20178:26#6
Suslik
> похоже на баг реализации shader compiler'а в дровах для той железки.

почему сразу баг? баг когда молча всё либо не тот результат

Andrey
> ошибка линковки

линковка подразумевает как минимум два шейдера

Правка: 1 ноя. 2017 8:29

AndreyПостоялецwww1 ноя. 20178:52#7
Suslik
> похоже на баг реализации shader compiler'а в дровах для той железки.
да я уже тоже так думаю
>попробуй просто попереворачивать код: поменяй поля местами, поменяй memory layout на std430,
да я уже тоже так думаю std430 не пойдет.
Это же не декстоп версия GLSL/OpenGL, только std140
>varying замени на out location, итд.
там макрос подставляется, сомневаюсь что компилятор имеет такие ошибки.
Wraith
> Гаже этих адрен ничего нет на всем мобильном рынке.
Нужели Mali лучше? про Power VR - тут вопросов нету, может есть еще опыт  впечатления с такой экзотикой как Vivante/Broadcom?
Wraith
> У нас на них уже 5 гпу багов. Такой был - драйвер не мог номально посчитать
> количество используемых элементов в массиве (правда в юниформах, а не в убо), и
> установка тупо не ставила некоторые.
> Хроническое, не лечится. Эти адрены - это квалкомовские снэпдрэгоны, - они
> самые массовые, стоят везде, в том числе и в самом говнистом говне. Вендоры их
> не фиксят, потому что либо уже разорились, либо на багамах. Даже амазон в своих
> киндлами не фиксят.
>
> Купируется рандомной перестановкой юниформов пока баг не пройдет.
Что-то совсем печально, я уже думаю не пытаться там компилить OpenCL, не компилит тоже.
Вообще у меня ветка кода соответвующая есть, сейчас если линковка не успешная я откатываю код шейдера на убогий список unifom и  работаю в старом стиле, но есть еще решение отказаться от линковки шейдеров выкинуть OpenGL GL ES 2.0 и работать
с ES версией ARB_separate_shader_objects, которая из коробки в OpenGL ES 3.x.
>Решается решительным отказом работать на адренах с просьбой купить новый телефон.
Ого, а я тут думал купить телефон с Andreno 505, там то эти этот шейдер линкуется, придется может с Mali покупать,

innuendoПостоялецwww1 ноя. 20179:27#8
Wraith
> Гаже этих адрен ничего нет на всем мобильном рынке. У нас на них уже 5 гпу
> багов

А что будет когда туда завезут Vulkan ?

WraithПостоялецwww2 ноя. 20177:34#9
Andrey
> Нужели Mali лучше?
Мали ничотак, но да, были какие-то бажки про плохо работающие второстепенные функции типа загрузки текстур. Но по крайней мере не глючили только потому что размер треугольника больше 5000.0f . Или вон дискарды эти дискардили вообще все, в том числе и резолв таргеты, ппц.

>с ES версией ARB_separate_shader_objects, которая из коробки в OpenGL ES 3.x.
Поддержка расширений на ондроедах еще хуже. Только в случае крайней нужды.

>Ого, а я тут думал купить телефон с Andreno 505, там то эти этот шейдер линкуется, придется может с Mali покупать,
эта зараза везде, да.

innuendo
> А что будет когда туда завезут Vulkan ?
С вулканом на ондроедах все на букву "Х", но подумайте, что "хорошо".
Уже пять раз откладывали запуск вулкана.

Впрочем, даже на десктопах мы у всех трех вендоров тоже нашли баги в дровах.

AndreyПостоялецwww2 ноя. 20178:38#10
Wraith
> Мали ничотак, но да, были какие-то бажки про плохо работающие второстепенные
> функции типа загрузки текстур. Но по крайней мере не глючили только потому что
> размер треугольника больше 5000.0f . Или вон дискарды эти дискардили вообще
> все, в том числе и резолв таргеты, ппц.
У них есть баг с отсечением длинных линий в пространстве экрана. Говорят что поддержка технологий у них хуже чем у Adreno, тот-же OpenCL 2.0 к примеру.
>Поддержка расширений на ондроедах еще хуже. Только в случае крайней нужды.
ну там раздельные шейдеры  в случае OpenGL ES 3x констекста работаю из короки, к UBO так-же все относится.

Кстати, написал на форуме Qualcomm про это баг, может ответят.

innuendoПостоялецwww2 ноя. 20179:20#11
Wraith
> Впрочем, даже на десктопах мы у всех трех вендоров тоже нашли баги в дровах.
Какие же? Напиши в ветке про Vulkan
WraithПостоялецwww2 ноя. 20179:32#12
>Кстати, написал на форуме Qualcomm про это баг, может ответят.
Ну скажут: "Уже три поколения как всё исправили. Это все вендоры телефонов не хотят апдейтить."
AndreyПостоялецwww2 ноя. 20179:43#13
Wraith
> Ну скажут: "Уже три поколения как всё исправили. Это все вендоры телефонов не
> хотят апдейтить."
да, ты прав, телефон HTC Desire 601 выпущен 4 года назад, Adreno 305 может стоять в более новых, где возможно уже есть исправления.

/ Форум / Программирование игр / Графика

2001—2017 © GameDev.ru — Разработка игр