Войти
ПрограммированиеФорумГрафика

Где здесь dependent texture read? (2 стр)

Страницы: 1 2 3 Следующая »
#15
15:40, 11 окт. 2013

Sergio
Mediump везде ставил? В вершинном тоже?


#16
15:41, 11 окт. 2013

Все, решилась проблема. Оказывается, я уперся в количество varying переменных. Профайлер, конечно, тоже молодец - нет бы сказать, что мол у тебя переменных больше чем надо, вместо dependent read.

#17
15:49, 11 окт. 2013

Sergio
Так, а теперь у меня вопрос, речь о количестве _переменных_ или количестве _компонент_? Компонент здесь 2х9=18, вроде не шибко много...

#18
16:02, 11 окт. 2013

Кол-во переменных. Я вот тоже стал рыть.
GL_MAX_VARYING_VECTORS. http://www.khronos.org/opengles/sdk/docs/man/

#19
16:05, 11 окт. 2013

Да, переменных:

  int v = 0;
  glGetIntegerv(GL_MAX_VARYING_VECTORS, &v);
  log::info("%d", v);

8

#20
16:07, 11 окт. 2013

Только блин,

GL_MAX_VARYING_VECTORS
params returns one value, the maximum number four-element floating-point vectors available for interpolating varying variables used by vertex and fragment shaders. Varying variables declared as matrices or arrays will consume multiple interpolators. The value must be at least 8.

То есть либо больше, либо vec4

#21
17:58, 11 окт. 2013

А в чем профит считать координаты в вершинном шейдере? По идее, расчет в вершинном жрет 1 интерполяцию на координату плюс тратит место в кэше просчитанных вершин. В случае расчета в пиксельном будет всего 1 MAD на координату, на мой взгляд, это дешевле.

#22
18:00, 11 окт. 2013

Не понял. То есть

varying float a[20];
Это 20 переменных, и уже столько нельзя? Cерьёзно?

}:+()___ [Smile]
> всего 1 MAD на координату
Не на координату, а на пиксель, а пикселей может быть 1920х1080 = 2 миллиона штук.

#23
18:02, 11 окт. 2013

}:+()___ [Smile]
Наверно ещё от площади полигона зависит. Если пикселей много, то лучше в вершинном. Тут надо балансировать.

#24
18:14, 11 окт. 2013

Роман Шувалов
> Не на координату, а на пиксель, а пикселей может быть 1920х1080 = 2 миллиона штук.
В обоих случаях подразумевается на пиксель, если кто не понял. 1 MAD / (pixel * coord) в случае расчета в пиксельном, 1 lerp / (pixel * coord) + проблемы с кэшем в случае расчета в вершинном. Первый вариант будет дешевле, если разработчики GPU не запилили какую-нибудь странную оптимизацию.

Kroll
> Наверно ещё от площади полигона зависит. Если пикселей много, то лучше в
> вершинном. Тут надо балансировать
Я вообще не учитываю вычисления в вершинном, только на пиксель. 1 MAD vs 1 lerp, интерполяция тоже не дается бесплатно.

#25
18:22, 11 окт. 2013

Роман Шувалов
> varying float a[20];
> Это 20 переменных, и уже столько нельзя? Cерьёзно?
Я привел кусок спецификации - four-element floating-point vectors. То есть
float[32] - еще ок, больше - уже не ок (речь не о можно/нельзя, а о перформансе).

}:+()___ [Smile]
Роман Шувалов
Kroll
На PowerVR чипах (до 6-ой серии), если в шейдере нет зависимых текстурных координат, то GPU может сделать предварительную выборку из текстуры. В этом и профит.

#26
18:40, 11 окт. 2013

Sergio
Аа,
> will consume multiple interpolators
это значит заставит интерполятор сработать несколько раз? То есть при float[33] сработает один раз для первых 32 элементов и еще один раз для 33-го? (Я не очень понял суть формулировки)

#27
20:57, 11 окт. 2013

Роман Шувалов
> это значит заставит интерполятор сработать несколько раз?
Это значит, что матрица/массив откусит несколько varying переменных от известного лимита.
Т.е. если max_varying_vectors = 8, то ты сможешь передать только две матрицы 4x4.

#28
22:11, 11 окт. 2013

RPGman
> то ты сможешь передать только две матрицы 4x4.
Матрицы как varying это забавно :)

#29
22:34, 11 окт. 2013

Sergio
Немного не в тему:
>The Apple A7 GPU does not penalize dependent-texture fetches.
Не пробовал? насколько "not penalize" ?

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.