-- -- float length_(vec2 v) -- -- float n = dot(v, v); src0.rgb = temp[0] : -- v DP3 src0.rg0 src0.rg0 , temp[0].a = DP ; -- n = 1.0 / sqrt(n); src0.a = temp[0] : -- n temp[0].a = RSQ |src0.a| ; -- n = 1.0 / n; src0.a = temp[0] : -- n temp[0].a = RCP src0.a ; -- -- float pow_(float x, float n) -- -- x = log2(x); src0.a = temp[0] : -- x temp[0].a = LN2 src0.a ; -- x = x * n; src0.a = temp[0] , -- x src1.a = temp[1] : -- n temp[0].a = MAD src0.a src1.a src0.0 ; -- x = exp2(x); src0.a = temp[0] : -- x temp[0].a = EX2 src0.a ; -- -- float sin_(float x) -- -- const[0] = { 1.0 / (pi * 2.0), 0, 0, 0 } -- -- x = x * 0.159154936671257019043 + 0.5; src0.a = temp[0] , -- x src1.rgb = const[0] , -- I_PI_2 (r) src2.a = float(48) : -- 0.5 temp[0].a = MAD src0.a src1.r src2.a ; -- x = fract(x); NOP src0.a = temp[0] : -- x temp[0].a = FRC src0.a ; -- x = sin((x - 0.5) * PI_2); src0.a = float(48) , -- 0.5 src1.a = temp[0] , -- x srcp.a = neg : -- (src1.a - src0.a) temp[0].a = SIN srcp.a ; -- the R500 fragment shader SIN instruction multiplies -- the operand by 2 * pi -- -- vec3 palette(float d) -- -- the call to cos_ is inlined and algebraically simplified -- -- const[1] = {0.25, 0.40625, 0.5625, 0} -- -- v = d + (vec3(0.25, 0.40625, 0.5625) + 0.5) src0.a = temp[0] , -- d src0.rgb = const[1] , -- vec3(0.25, 0.40625, 0.5625) src1.rgb = float(48) , -- 0.5 srcp.rgb = add : -- (vec3(0.25, 0.40625, 0.5625) + 0.5) temp[0].rgb = MAD src0.111 src0.aaa srcp.rgb ; -- v = frac(v) src0.rgb = temp[0] : -- v temp[0].rgb = FRC src0.rgb ; -- v = v - 0.5 src0.rgb = temp[0] , -- v src1.rgb = float(48) : -- 0.5 temp[0].rgb = MAD src0.111 src0.rgb -src1.rgb ; -- v = cos(v) src0.rgb = temp[0] : -- v COS src0.r , temp[0].r = SOP ; src0.rgb = temp[0] : -- v COS src0.g , temp[0].g = SOP ; src0.rgb = temp[0] : -- v COS src0.b , temp[0].b = SOP ; -- col = vec3(0.5, 0.5, 0.5) * v + vec3(0.5, 0.5, 0.5) src0.rgb = temp[0] , -- v src1.rgb = float(48) : -- 0.5 temp[0].rgb = MAD src1.rgb src0.rgb src1.rgb;