const float4 ePi = float4( 3.14159e-00, 2.65358e-06, 9.79323e-12, 8.46264e-18 ); #ifndef PI_PRECISION #define PI_PRECISION 0 #endif #if PI_PRECISION == 0 const float cPi = 3.14159265; // 3.14159274 const float getPi() { return cPi; } #elif PI_PRECISION == -1 const float getPi() { float xPi : register( r2 ); asm { ps_3_0 } } #elif PI_PRECISION == 24 const float getPi() { float rPi; rPi = ePi[3] + ePi[2] + ePi[1] + ePi[0] ; return rPi; } #elif PI_PRECISION == 18 const float getPi() { float rPi; rPi = ePi[2] + ePi[1] + ePi[0] ; return rPi; } #elif PI_PRECISION == 12 const float getPi() { volatile float rPi; rPi = ePi[1] + ePi[0] ; return rPi; } #endif float4 main( float4 unk1 : COLOR1, float4 unk2 : COLOR2 ) : COLOR0 { // arguments to main are 'uncertain', and so are not const-expression optimized away float Pi = getPi(); return float4( Pi, Pi, Pi, Pi ); }