2013-02-11 4 views
2

Я уверен, что компиляторы GLSL делают большую оптимизацию. Мне интересно, есть ли способ (возможно, с контекстом отладки GL или некоторым расширением?), Чтобы получить «оптимизированную версию» заданной строки источника GLSL непосредственно перед, она переведена на неинтуитивный ASM или прямой машинный код графического процессора.Как я могу узнать, оптимизирует ли мой компилятор GLSL следующее?

Рассмотрим следующий пример:

vec3 fx_Noop (const in vec3 vCol) { 
    return vCol; 
} 
vec3 fx_Tex2D (const in vec3 vCol) { 
    return fx_Noop(texture(uni_Tex2D, var_Tex2D).rgb); 
} 

Здесь вся fx_Noop() определение и все вызовы к нему должны быть устранены, но что более важно fx_Tex2D() следует переписать так:

vec3 fx_Tex2D() { 
    return texture(uni_Tex2D, var_Tex2D).rgb; 
} 

Поскольку const in vec3 vCol не используется.

Теперь я понимаю, что каждый драйвер GL и реализация GLSL действуют по-разному. Тем не менее, я хотел бы рассказать о том, что именно делает драйвер для данной исходной строки GLSL непосредственно перед сборкой/компиляцией/компоновкой.

Я также понимаю, что кодер GLSL не должен писать код, как указано выше, но в несколько экспериментальном сценарии генерации кода все упрощается, когда определенные компромиссы могут быть безопасно сделаны, зная, что большинство компиляторов/реализаций будут применяйте хорошую очистку в любом случае ...

+1

Оптимизация никогда не происходит в исходной строке, но на последующих шагах, как правило, абстрактное синтаксическое дерево или какой-либо промежуточный код. – datenwolf

+0

Догадка, что бы * все еще быть интересным для вывода/проверки ...;) – metaleap

+2

Ну, по крайней мере, с помощью драйверов с открытым исходным кодом MesaGL/DRI2/DRM вы можете это сделать. Но нет официального API OpenGL для получения или установки AST программы шейдеров. Это было бы прохладное расширение, хотя, позволяя реализовать другие языки программирования шейдеров, чем GLSL (я хотел бы иметь шейдерные языки, такие как Lisp или ML). – datenwolf

ответ

2

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

Смежные вопросы