//  waves.073803b3.pc modified for nvidia stero mode
//  require wrapper dll for correct loading
// Parameters:
//
//   float4 CameraPos;
//   float FrameTime;
//   float4 WaveDuDv;
//   row_major float4x4 World;
//   row_major float4x4 WorldViewProj;
//
//
// Registers:
//
//   Name          Reg   Size
//   ------------- ----- ----
//   World         c0       4
//   WorldViewProj c4       4
//   FrameTime     c8       1
//   CameraPos     c9       1
//   WaveDuDv      c10      1
//

   float4 CameraPos : register(c9);
   float FrameTime : register(c8);
   float4 WaveDuDv : register(c10);
   row_major float4x4 World : register(c0);
   row_major float4x4 WorldViewProj : register(c4);
   sampler  StereoParmsTexture;

struct VsOut
{
  float4 o0                               : POSITION;         
  float4 o1             			      : COLOR0;
  float2 o2                               : TEXCOORD0;        
  float4 o3                               : TEXCOORD1;        
  float4 o4                               : TEXCOORD2;        
  float2 o5                               : TEXCOORD4;        
  float2 o6                               : TEXCOORD5;        
  float2 o7                               : TEXCOORD6;
  float4 o8                               : TEXCOORD7;
};


VsOut main(float4 v0          : POSITION,   
                          float4 v1              : COLOR0,
                          float4 v2  : TEXCOORD0 )

{

    VsOut o = (VsOut)0;
	float4 _c11=float4(0.157728702, 1.00904226, 0.5, 4);
	float4 _c12=float4(6.28318548, -3.14159274, -0.0199999996, 0.00300000003);
	float4 _c13=float4(1, 0, 0, 0);
	float4 r0;
	float4 r1;
	float4 r2;
	float4 r3;
	
	r0.w = _c11.x;
	r0.w = r0.w * FrameTime.x;
	r1.z =  abs(r0.w) - (float)floor(abs(r0.w));
	r1.w = (r0.w >= -r0.w) ? 1.0f : 0.0f;
	r0.w = r1.w * (r1.z - (-r1.z)) + (-r1.z);
	r0.w = r0.w * _c11.y + _c11.z;
	r0.w =  abs(r0.w) - (float)floor(abs(r0.w));
	r1.w = r0.w * _c12.x + _c12.y;
	r0.x = cos(r1.w);
    r0.y = sin(r1.w);
	r1.xy = WaveDuDv + v2;
	o.o5.xy = r0.x * _c12.zwzw + r1;
	r0.w = r0.y * r0.x;
	r3.xy = r1 + r1;
	r2.xy = r0.w * _c12.zwzw;
	o.o6.xy = r0.y * _c12.zwzw + r3;
	o.o7.xy =  r1 * _c11.w + r2;
	o.o2.xy = r1;
	r0 = World[1] * v0.y;
	r1 = v0.x * World[0] + r0;
	r0 = WorldViewProj[1] * v0.y;
	r1 = v0.z * World[2] + r1;
	r0 = v0.x * WorldViewProj[0] + r0;
	r1 = r1 + World[3];
	r0 = v0.z * WorldViewProj[2] + r0;
	o.o8 = -r1 + CameraPos;
	r0 = r0 + WorldViewProj[3];
	o.o0 = r0;
	float4 ocolor = tex2Dlod( StereoParmsTexture, 0.0625);
	r0.x += ocolor.r  * (r0.w - ocolor.g);
	o.o3 = r0;
	o.o1 = v1;
	o.o4 = _c13.xxxy * v0.xyzx;
	return(o);
}