是否有無論如何優化下一個算法是更快,即使只是一個小的速度增加?GLSL着色算法優化
const mat3 factor = mat3(1.0, 1.0, 1.0, 2.112, 1.4, 0.0, 0.0, 2.18, -2.21);
vec3 calculate(in vec2 coord)
{
vec3 sample = texture2D(texture_a, coord).rgb;
return (factor/sample) * 2.15;
}
是否有無論如何優化下一個算法是更快,即使只是一個小的速度增加?GLSL着色算法優化
const mat3 factor = mat3(1.0, 1.0, 1.0, 2.112, 1.4, 0.0, 0.0, 2.18, -2.21);
vec3 calculate(in vec2 coord)
{
vec3 sample = texture2D(texture_a, coord).rgb;
return (factor/sample) * 2.15;
}
我能想到的唯一顯著優化收拾texture_a
和texture_b
到一個單一的三通道的質感,如果你能。這爲您節省了兩個紋理查找中的一個,這很可能是此處的瓶頸。
@Thomas答案是最有用的,因爲紋理查找是最昂貴的,如果他的解決方案可能在您的應用程序中。如果您已經在其他地方使用了這些紋理,則可以將這些值作爲參數傳遞,以避免重複查找。
否則我不知道它是否可以優化,但一些簡單的事情,我腦海中。
編譯器優化:
分配const關鍵字來座標參數,如果可能的話品嚐過。
在每個浮點元素中分配f文字。
也許手動分配墊
我不知道,如果它的速度更快,因爲我不知道矩陣乘法是如何實現的,但由於定係數矩陣包含了許多一和零它也許可以手動分配。
vec3 calculate(const in vec2 coord)
{
//not 100% sure if that init is possible
const vec3 sample = vec3(texture2D(texture_a, coord).r
texture2D(texture_b, coord).ra - 0.5f);
vec3 result = vec3(sample.y);
result.x += sample.x + sample.z;
result.y += 2.112f * sample.x;
result.z *= 2.18f;
result.z -= 2.21f * sample.z;
return result;
}