r500/verbatim/palette_fractal_functions.fs.asm
2025-11-13 10:56:28 -06:00

98 lines
2.1 KiB
NASM

--
-- 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;