//river reflections
Texture2D<float4> t8 : register(t8);
Texture2D<float4> t5 : register(t5);
Texture2D<float4> t3 : register(t3);
Texture2D<float4> t0 : register(t0);
SamplerState s8_s : register(s8);
SamplerState s5_s : register(s5);
SamplerState s3_s : register(s3);
SamplerState s0_s : register(s0);
cbuffer cb4 : register(b4)
{
  float4 cb4[236];
}
cbuffer cb3 : register(b3)
{
  float4 cb3[77];
}
cbuffer cb13 : register(b13)
{
  float4 cb13[30];
}

// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);

void main(
  float4 v0 : SV_POSITION0,
  float4 v1 : TEXCOORD8,
  float4 v2 : COLOR0,
  float4 v3 : COLOR1,
  float4 v4 : TEXCOORD9,
  float4 v5 : TEXCOORD0,
  float4 v6 : TEXCOORD1,
  float4 v7 : TEXCOORD2,
  float4 v8 : TEXCOORD3,
  float4 v9 : TEXCOORD4,
  float4 v10 : TEXCOORD5,
  float4 v11 : TEXCOORD6,
  float4 v12 : TEXCOORD7,
  out float4 o0 : SV_TARGET0)
{
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8;
  uint4 bitmask, uiDest;
  float4 fDest;
  uint u;

  float4 s = StereoParams.Load(0);
  float4 testeo = IniParams.Load(int2(90,0));

  r1.y = (0 < abs(v9.w)) ? 1.0 : 0.0;
  r1.x = rcp(v9.w);
  r0.w = r1.y ? r1.x : 9.99999993e+36;
  r0.xy = v9.xy * r0.ww;
  r0.xy = float2(0.5,0.5) * r0.xy;
  r2.xyzw = v10.xyzw / v10.wwww;


//r2.x += s.x * (1.0 - s.y / v10.w) * testeo.x;

  r1.xyzw = t5.Sample(s5_s, r2.xy).xyzw;
  r1.xyzw = asfloat(asuint(r1.xyzw) & asuint(cb3[54].xyzw));
  r1.xyzw = asfloat(asuint(r1.xyzw) | asuint(cb3[55].xyzw));
  
//v5.x += s.x * (1.0 - s.y / v10.w) * testeo.x;  
  
  r2.xyzw = t3.Sample(s3_s, v5.xy).xyzw;
  r2.xyzw = asfloat(asuint(r2.xyzw) & asuint(cb3[50].xyzw));
  r2.xyzw = asfloat(asuint(r2.xyzw) | asuint(cb3[51].xyzw));
  r2.xy = r2.wy * float2(2,2) + float2(-1,-1);
  r3.x = r2.x * 0.25 + r0.x;
  r3.y = r2.y * 0.25 + -r0.y;
  r0.xy = float2(0.5,0.5) + r3.xy;
  r2.w = 0.000500000024 + r1.x;
  r2.w = -v11.x + r2.w;
  r0.z = -v11.x + r1.x;
  r0.zw = saturate(float2(2048,32) * r0.zz);
  r4.w = (r2.w >= 0) ? 1.0 : 0.0;
  r2.w = r4.w ? r0.z : 1;
  r0.z = v8.z * -0.300000012 + 1;
  r3.w = v6.w * r0.z;
  r2.w = r3.w * r2.w + r0.w;
  r0.z = saturate(r2.w);
  r0.zw = r2.xy * r0.zz;
  r4.xy = r0.zw * float2(0.100000001,0.100000001) + v10.xy;
  
r0.x += s.x * (1.0 - s.y / v10.w) * 0.5;  
  
  r0.xyzw = t0.Sample(s0_s, r0.xy).xyzw;
  r0.xyzw = asfloat(asuint(r0.xyzw) & asuint(cb3[44].xyzw));
  r0.xyzw = asfloat(asuint(r0.xyzw) | asuint(cb3[45].xyzw));
  r5.xyzw = t5.Sample(s5_s, r4.xy).xyzw;
  r5.xyzw = asfloat(asuint(r5.xyzw) & asuint(cb3[54].xyzw));
  r5.xyzw = asfloat(asuint(r5.xyzw) | asuint(cb3[55].xyzw));
  r7.y = log2(abs(r0.x));
  u = asuint(r7.y);
  r7.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r6.x = r7.x ? -9.99999993e+36 : r7.y;
  r7.y = log2(abs(r0.y));
  u = asuint(r7.y);
  r7.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r6.y = r7.x ? -9.99999993e+36 : r7.y;
  r7.y = log2(abs(r0.z));
  u = asuint(r7.y);
  r7.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r6.z = r7.x ? -9.99999993e+36 : r7.y;
  r0.xyz = cb4[9].xxx * r6.xyz;
  r6.x = exp2(r0.x);
  r6.y = exp2(r0.y);
  r6.z = exp2(r0.z);
  r7.x = dot(v8.xyz, v8.xyz);
  r7.x = rsqrt(r7.x);
  r7.y = (asuint(r7.x) != 0x7f800000u) ? 1.0 : 0.0;
  r7.x = r7.y ? r7.x : 0;
  r0.xyz = v8.xyz * r7.xxx;
  r7.w = dot(r2.xy, -r2.xy);
  r0.w = 1 + r7.w;
  r7.y = rsqrt(abs(r0.w));
  u = asuint(r7.y);
  r7.x = (u == 0x7f800000u) ? 1.0 : 0.0;
  r0.w = r7.x ? 9.99999993e+36 : r7.y;
  r7.y = (0 < abs(r0.w)) ? 1.0 : 0.0;
  r7.x = rcp(r0.w);
  r2.z = r7.y ? r7.x : 9.99999993e+36;
  r6.w = saturate(dot(r0.xyz, r2.xyz));
  r0.x = 1 + -r6.w;
  r7.xyz = float3(0,-0.00392156886,-0.0156862754);
  r0.yzw = r6.www * r7.xyz + float3(0.00392156886,0.0196078438,0.0392156877);
  r6.w = r0.x * r0.x;
  r6.w = r6.w * r6.w;
  r6.w = r6.w * r0.x;
  r6.w = r6.w * 0.979600012 + 0.0204000007;
  r1.yzw = r6.xyz * r6.www;
  r0.x = saturate(dot(r2.xyz, v6.xyz));
  r2.x = saturate(dot(v8.xyz, r2.xyz));
  r2.x = r2.x * r2.x;
  r2.x = r2.x * r2.x;
  r0.x = 0.00999999978 * r0.x;
  r1.yzw = r0.xxx * v7.xyz + r1.yzw;
  r3.xyz = r0.yzw * r2.xxx + r1.yzw;
  r0.x = r5.x + -r1.x;
  r4.zw = v10.zw;
  r8.xyzw = v10.xyzw / v10.wwww;
  
//r8.x += s.x * (1.0 - s.y / v10.w) * testeo.x;  
  
  r1.xyzw = t8.Sample(s8_s, r8.xy).xyzw;
  r1.xyzw = asfloat(asuint(r1.xyzw) & asuint(cb3[60].xyzw));
  r1.xyzw = asfloat(asuint(r1.xyzw) | asuint(cb3[61].xyzw));
  r8.xyzw = r4.xyzw / r4.wwww;
  
//r8.x += s.x * (1.0 - s.y / r4.w) * testeo.x;    
  
  r4.xyzw = t8.Sample(s8_s, r8.xy).xyzw;
  r4.xyzw = asfloat(asuint(r4.xyzw) & asuint(cb3[60].xyzw));
  r4.xyzw = asfloat(asuint(r4.xyzw) | asuint(cb3[61].xyzw));
  r8.xyz = (r0.xxx >= float3(0,0,0)) ? float3(1,1,1) : float3(0,0,0);
  r0.xyz = r8.xyz ? r1.xyz : r4.xyz;
  r8.y = log2(abs(r0.x));
  u = asuint(r8.y);
  r8.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r1.x = r8.x ? -9.99999993e+36 : r8.y;
  r8.y = log2(abs(r0.y));
  u = asuint(r8.y);
  r8.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r1.y = r8.x ? -9.99999993e+36 : r8.y;
  r8.y = log2(abs(r0.z));
  u = asuint(r8.y);
  r8.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r1.z = r8.x ? -9.99999993e+36 : r8.y;
  r0.xyz = cb4[9].xxx * r1.xyz;
  r1.x = exp2(r0.x);
  r1.y = exp2(r0.y);
  r1.z = exp2(r0.z);
  r0.xy = float2(1,0.100000001) + -r2.ww;
  r0.x = saturate(r0.x);
  r1.w = 0.550000012 * r0.x;
  r8.xyz = -r3.xyz + r1.xyz;
  r4.xyz = r1.www * r8.xyz + r3.xyz;
  r0.x = 1.75 * r2.w;
  r8.w = (r0.y >= 0) ? 1.0 : 0.0;
  r4.w = r8.w ? r2.w : r0.x;
  r8.xyzw = (-cb4[8].xxxx >= float4(0,0,0,0)) ? float4(1,1,1,1) : float4(0,0,0,0);
  r0.xyzw = r8.xyzw ? r3.xyzw : r4.xyzw;
  r8.y = log2(abs(r0.x));
  u = asuint(r8.y);
  r8.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r1.x = r8.x ? -9.99999993e+36 : r8.y;
  r8.y = log2(abs(r0.y));
  u = asuint(r8.y);
  r8.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r1.y = r8.x ? -9.99999993e+36 : r8.y;
  r8.y = log2(abs(r0.z));
  u = asuint(r8.y);
  r8.x = (u == 0xff800000u) ? 1.0 : 0.0;
  r1.z = r8.x ? -9.99999993e+36 : r8.y;
  r0.w = saturate(r0.w);
  r1.xyz = cb4[10].xxx * r1.xyz;
  r0.x = exp2(r1.x);
  r0.y = exp2(r1.y);
  r0.z = exp2(r1.z);
  r8.xyzw = r0.xyzw;
  r0.w = saturate(v4.x);
  r0.xyz = -cb3[0].xyz + r8.xyz;
  r8.xyz = r0.www * r0.xyz + cb3[0].xyz;
  o0.xyzw = r8.xyzw;
  return;
}