Нет надежных ресурсов, которые бы указывали, сколько времени занимают различные стандартные функции шейдеров. Даже для конкретного оборудования.
Причина этого связана с планированием инструкций и работой современных шейдерных архитектур. Возьмите простую sin
функцию. Допустим, в оборудовании есть специальное оборудование для вычисления синуса значения, поэтому оно не использует серию Tailor вручную или что-то в этом роде. Однако, скажем также, что для его вычисления требуется последовательность из 4 кодов операций. Следовательно, sin
будет занимать "4 цикла".
Однако , все эти коды операций являются скалярными операциями. Следовательно, в то время как они продолжаются, на самом деле вы могли бы иметь некоторые 3-векторные точечные продукты, или в случае некоторого аппаратного обеспечения, 4-векторные точечные продукты, продолжающиеся в то же время , на тот же процессор. Следовательно, если аппаратное обеспечение имеет 4-векторные точечные произведения со скалярными операциями, число циклов, необходимое для выполнения sin
и умножения матрицы на вектор, равно ... все еще 4.
Так сколько же стоила операция sin
? Если вы уберете матрицу умножения, ничто не станет быстрее. Если вы достанете sin
, все равно ничего не станет быстрее. Сколько это стоит? Вы не можете сказать, потому что стоимость одной операции не имеет значения; единственное измеримое количество - это стоимость самого шейдера .
В конечном счете, все, что вы можете сделать, это попытаться разумно построить свой шейдер и посмотреть, какова производительность. Если у вас нет низкоуровневых инструментов отладки для разборки базовой сборки шейдеров (и нет, сборка DX недостаточно хороша), это действительно лучшее, что вы можете сделать.