Doing некоторых исследований методов сглаживания, я наткнулся на этом куске кода (схваченный от FXAA затенения от Nvidia):GLSL/HLSL - Несколько однолинейные условные операторы в отличии от одного блока
if(!pairN) lumaN = lumaS;
if(!pairN) gradientN = gradientS;
if(!pairN) lengthSign *= -1.0;
Есть хороший Причина, по которой это не написано вместо следующего?
if (!pairN) {
lumaN = lumaS;
gradientN = gradientS;
lengthSign *= -1.0;
}
Я предполагаю, что это какая-то оптимизация? Просто кажется, на самом деле противоречит здравому смыслу ...
Могут ли современные компиляторы GPU не оптимизировать интуитивно понятную версию? – skiwi
Похоже, что они не могут оптимизировать большой блок '' if''. –
@skiwi Если это одна вещь, которую я узнал о реализации GLSL на протяжении многих лет ... компилятор делает много неожиданных вещей. Некоторые соображения оптимизируют мой разум, и другие, с которыми я едва могу поверить, были упущены. Попытка в обоих направлениях и просмотр промежуточного результата с помощью 'glGetProgramBinary' так же хороши, как вы можете получить. – jozxyqk