const float cPi = 3.14159265; // 3.14159274 const float4 ePi = float4( 3.14159e-00, 2.65358e-06, 9.79323e-12, 8.46264e-18 ); const float getPi_dp24() { float rPi; rPi = ePi[3] + ePi[2] + ePi[1] + ePi[0] ; return rPi; } const float getPi_dp18() { float rPi; rPi = ePi[2] + ePi[1] + ePi[0] ; return rPi; } const float getPi_dp12() { volatile float rPi; rPi = ePi[1] + ePi[0] ; return rPi; } float4 main( float4 unk1 : COLOR1, float4 unk2 : COLOR2 ) : COLOR0 { // arguments to main are 'uncertain', and so are not const-expression optimized away const float3 v1 = float3( 1, 1, 1 ); float NL = unk1[0], NV = unk1[1], F = unk1[2], Df = unk1[3], G = unk2[0], Pi = getPi_dp24(); float Si_1 = (F * Df * G); float Si_2 = (Pi * NL * NV); return float4( Si_1, Si_2, Si_1 / Si_2, 1 ); }