Currently I use simple and ugly implementation of lineral -> sRGB transfrom float sRGB(float x) { if ( x <= 0.00031308) return 12.92*x; else return 1.055*pow(x,(1/2.4) ) - 0.055; } vec3 sRGB_v3(vec3 c) { return vec3(sRGB(c.x),sRGB(c.y),sRGB(c.z)); } Possible, that correction ( x <= 0.00031308 ) with small vales will not important for practical. I consider just leave pow(x,1/2.4) but not sure how much impact it will have. Anyone can suggest ways for optimize it? Can be vectorization help? Can be some polynomal fitting be practical better ?