На сучасному обладнанні, якщо всі виклики в групі йдуть за одним і тим же шляхом, невикористаний шлях не оцінюється.
у псевдокоді:
if(cond){
res = ...
}else{
res = ...
}
стає
if(anyInvocationARB(cond)){
res1 = ...
}
if(anyInvocationARB(!cond)){
res2 = ...
}
res = cond?res1:res2;
Де anyInvocationARB
буде істинно, якщо будь-яке виклик шейдера буде мати істину як cond
(від розширення opengl ARB_shader_group_vote ).
Якщо cond можна отримати лише в одностроях, то водій може оптимізувати та оцінити стан перед запуском візуалізації та замінити if на goto на правильну гілку. У OpenGL є функція, яка називається рівномірною підпрограмою, яка робить її явною.