// sky : SUN disk removed

cbuffer cbMaterialParams : register(b9)
{
  float4 ShadowDistance : packoffset(c0);
  float4x4 ShadowMatrix[4] : packoffset(c1);
  float4x4 ShadowMatrixInv[4] : packoffset(c17);
  float4 ShadowBlurFactor : packoffset(c33);
  float4 ShadowLightDir : packoffset(c34);
  float4 FlatShadowDistance : packoffset(c35);
  float4 atmSunDirectionParam : packoffset(c36);
  float4 atmEarthCenterParam : packoffset(c37);
  float4 fogCoeff : packoffset(c38);
  float4 fogColorParam : packoffset(c39);
  float4 fogColorParam2 : packoffset(c40);
}

SamplerState gAnisotropicClampSampler_s : register(s14);
Texture2D<float4> transmittanceTex : register(t0);
Texture3D<float4> inscatterTex : register(t127);


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


void main( 
  float4 v0 : SV_POSITION0,
  float4 v1 : TEXCOORD0,
  float3 v2 : TEXCOORD1,
  out float4 o0 : SV_TARGET0)
{
  float4 r0,r1,r2,r3;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.x = dot(v2.xyz, v2.xyz);
  r0.x = rsqrt(r0.x);
  r0.xyz = v2.xyz * r0.xxx;
  r0.w = dot(atmEarthCenterParam.xyz, r0.xyz);
  r1.x = cmp(r0.w < 0);
  r1.y = dot(atmEarthCenterParam.xyz, atmEarthCenterParam.xyz);
  r1.z = r0.w * r0.w + -r1.y;
  r1.z = 40449600 + r1.z;
  r1.w = cmp(0 < r1.z);
  r1.x = r1.w ? r1.x : 0;
  r2.xyzw = r1.xxxx ? float4(1,0,0,0.49609375) : float4(-1,766799.938,875.671143,0.50390625);
  r1.x = r2.y + r1.z;
  r1.z = cmp(0 < r1.x);
  r1.x = sqrt(r1.x);
  r1.x = r1.z ? r1.x : 0;
  r1.x = r0.w * r2.x + r1.x;
  r1.z = -40449600 + r1.y;
  r1.w = cmp(0 < r1.z);
  r1.yz = sqrt(r1.yz);
  r1.z = r1.w ? r1.z : 0;
  r1.w = r1.z + r2.z;
  r3.w = r1.z * 0.00110629434 + 0.015625;
  r1.x = r1.x / r1.w;
  r3.z = r1.x * 0.4921875 + r2.w;
  r1.x = dot(atmEarthCenterParam.xyz, atmSunDirectionParam.xyz);
  r1.x = r1.x / r1.y;
  r1.x = max(-0.197500005, r1.x);
  r1.x = 5.34962368 * r1.x;
  r1.z = max(1, abs(r1.x));
  r1.z = 1 / r1.z;
  r1.w = min(1, abs(r1.x));
  r1.z = r1.w * r1.z;
  r1.w = r1.z * r1.z;
  r2.x = r1.w * 0.0208350997 + -0.0851330012;
  r2.x = r1.w * r2.x + 0.180141002;
  r2.x = r1.w * r2.x + -0.330299497;
  r1.w = r1.w * r2.x + 0.999866009;
  r2.x = r1.z * r1.w;
  r2.x = r2.x * -2 + 1.57079637;
  r2.y = cmp(1 < abs(r1.x));
  r1.x = min(1, r1.x);
  r1.x = cmp(r1.x < -r1.x);
  r2.x = r2.y ? r2.x : 0;
  r1.z = r1.z * r1.w + r2.x;
  r1.x = r1.x ? -r1.z : r1.z;
  r1.x = r1.x * 0.909090877 + 0.74000001;
  r1.x = r1.x * 0.484375 + 0.015625;
//removing this line remove the sun
// r0.x = dot(r0.xyz, atmSunDirectionParam.xyz);
  r0.y = fogCoeff.z * r0.y;
  r0.z = 1 + r0.x;
  r1.z = 3.5 * r0.z;
  r1.z = floor(r1.z);
  r1.x = r1.z + r1.x;
  r0.z = r0.z * 3.5 + -r1.z;
  r1.z = 1 + r1.x;
  r3.xy = float2(0.125,0.125) * r1.zx;
  r2.xyzw = inscatterTex.SampleLevel(gAnisotropicClampSampler_s, r3.yzw, 0).xyzw;
  r3.xyzw = inscatterTex.SampleLevel(gAnisotropicClampSampler_s, r3.xzw, 0).xyzw;
  r3.xyzw = r3.xyzw * r0.zzzz;
  r0.z = 1 + -r0.z;
  r2.xyzw = r2.xyzw * r0.zzzz + r3.xyzw;
  r0.z = max(9.99999975e-005, r2.x);
  r2.xyzw = max(float4(0,0,0,0), r2.xyzw);
  r1.xzw = r2.xyz * r2.www;
  r1.xzw = r1.xzw / r0.zzz;
  r0.z = -r0.x * 1.60000002 + 1.63999999;
  r0.z = log2(abs(r0.z));
  r0.z = -1.5 * r0.z;
  r0.z = exp2(r0.z);
  r2.w = r0.x * r0.x + 1;
  r0.x = 0.99984771 + -r0.x;
  r0.x = 144269.5 * r0.x;
  r0.x = exp2(r0.x);
  r0.x = 1 + r0.x;
  r0.x = 1 / r0.x;
  r0.z = r2.w * r0.z;
  r2.w = 0.0596831031 * r2.w;
  r3.x = 0.0162772108 * r0.z;
  r3.yzw = float3(1,0.429629624,0.175226584);
  r1.xzw = r3.yxx * r1.xzw;
  r1.xzw = r1.xzw * r3.xzw;
  r1.xzw = r2.xyz * r2.www + r1.xzw;
  r1.xzw = float3(100,100,100) * r1.xzw;
  r0.z = r0.w / r1.y;
  r0.w = 6360 / r1.y;
  r1.y = -6360 + r1.y;
  r0.w = -r0.w * r0.w + 1;
  r2.x = cmp(0 < r0.w);
  r0.w = sqrt(r0.w);
  r0.w = r2.x ? r0.w : 0;
  r0.w = cmp(r0.z < -r0.w);
  r0.z = 0.150000006 + r0.z;
  r0.xz = float2(100,12.262105) * r0.xz;
  r2.x = 0.0166666675 * r1.y;
  r1.y = cmp(0 < r1.y);
  r2.x = sqrt(r2.x);
  r2.y = r1.y ? r2.x : 0;
  r1.y = max(1, abs(r0.z));
  r1.y = 1 / r1.y;
  r2.z = min(1, abs(r0.z));
  r1.y = r2.z * r1.y;
  r2.z = r1.y * r1.y;
  r2.w = r2.z * 0.0208350997 + -0.0851330012;
  r2.w = r2.z * r2.w + 0.180141002;
  r2.w = r2.z * r2.w + -0.330299497;
  r2.z = r2.z * r2.w + 0.999866009;
  r2.w = r2.z * r1.y;
  r2.w = r2.w * -2 + 1.57079637;
  r3.x = cmp(1 < abs(r0.z));
  r0.z = min(1, r0.z);
  r0.z = cmp(r0.z < -r0.z);
  r2.w = r3.x ? r2.w : 0;
  r1.y = r1.y * r2.z + r2.w;
  r0.z = r0.z ? -r1.y : r1.y;
  r2.x = 0.666666687 * r0.z;
  r2.xy = float2(-0.001953125,-0.0078125) + r2.xy;
  r2.xyzw = transmittanceTex.SampleLevel(gAnisotropicClampSampler_s, r2.xy, 0).xyzw;
  r2.xyz = r0.www ? float3(0,0,0) : r2.xyz;
  r0.xzw = r2.xyz * r0.xxx + r1.xzw;
  r0.xzw = atmSunDirectionParam.www * r0.xzw;
  r1.xyz = float3(0.383170009,0.383170009,0.383170009) * abs(r0.xzw);
  r1.xyz = log2(r1.xyz);
  r1.xyz = float3(0.454545468,0.454545468,0.454545468) * r1.xyz;
  r1.xyz = exp2(r1.xyz);
  r2.xyz = float3(-1.44269502,-1.44269502,-1.44269502) * r0.xzw;
  r0.xzw = cmp(r0.xzw < float3(1.41299999,1.41299999,1.41299999));
  r2.xyz = exp2(r2.xyz);
  r2.xyz = float3(1,1,1) + -r2.xyz;
  r0.xzw = r0.xzw ? r1.xyz : r2.xyz;
  r0.xzw = -fogColorParam.xyz + r0.xzw;
  r1.x = fogColorParam.w * fogCoeff.z;
  r1.y = r0.y * -120000 + -r1.x;
  r1.x = min(60, -r1.x);
  r1.x = 1.44269502 * r1.x;
  r1.x = exp2(r1.x);
  r1.y = min(60, r1.y);
  r1.y = 1.44269502 * r1.y;
  r1.y = exp2(r1.y);
  r1.y = r1.x + -r1.y;
  r1.xy = -fogCoeff.ww * r1.xy;
  r1.x = 173123.406 * r1.x;
  r1.x = exp2(r1.x);
  r1.y = r1.y / r0.y;
  r0.y = cmp(9.99999997e-007 < abs(r0.y));
  r1.y = min(60, r1.y);
  r1.y = 1.44269502 * r1.y;
  r1.y = exp2(r1.y);
  r0.y = r0.y ? r1.y : r1.x;
  r0.y = max(fogColorParam2.x, r0.y);
  o0.xyz = r0.yyy * r0.xzw + fogColorParam.xyz;
  o0.w = 1;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.9200.20789
//
//   using 3Dmigoto v1.2.21 on Sat Jan 09 16:32:45 2016
//
//
// Buffer Definitions: 
//
// cbuffer cbMaterialParams
// {
//
//   float4 ShadowDistance;             // Offset:    0 Size:    16 [unused]
//   float4x4 ShadowMatrix[4];          // Offset:   16 Size:   256 [unused]
//   float4x4 ShadowMatrixInv[4];       // Offset:  272 Size:   256 [unused]
//   float4 ShadowBlurFactor;           // Offset:  528 Size:    16 [unused]
//   float4 ShadowLightDir;             // Offset:  544 Size:    16 [unused]
//   float4 FlatShadowDistance;         // Offset:  560 Size:    16 [unused]
//   float4 atmSunDirectionParam;       // Offset:  576 Size:    16
//   float4 atmEarthCenterParam;        // Offset:  592 Size:    16
//   float4 fogCoeff;                   // Offset:  608 Size:    16
//   float4 fogColorParam;              // Offset:  624 Size:    16
//   float4 fogColorParam2;             // Offset:  640 Size:    16
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// gAnisotropicClampSampler          sampler      NA          NA   14        1
// transmittanceTex                  texture  float4          2d    0        1
// inscatterTex                      texture  float4          3d  127        1
// cbMaterialParams                  cbuffer      NA          NA    9        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float       
// TEXCOORD                 0   xy          1     NONE   float       
// TEXCOORD                 1   xyz         2     NONE   float   xyz 
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_TARGET                0   xyzw        0   TARGET   float   xyzw
//
ps_4_0
dcl_constantbuffer cb9[41], immediateIndexed
dcl_sampler s14, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture3d (float,float,float,float) t127
dcl_input_ps linear v2.xyz
dcl_output o0.xyzw
dcl_temps 4
dp3 r0.x, v2.xyzx, v2.xyzx
rsq r0.x, r0.x
mul r0.xyz, r0.xxxx, v2.xyzx
dp3 r0.w, cb9[37].xyzx, r0.xyzx
lt r1.x, r0.w, l(0.000000)
dp3 r1.y, cb9[37].xyzx, cb9[37].xyzx
mad r1.z, r0.w, r0.w, -r1.y
add r1.z, r1.z, l(40449600.000000)
lt r1.w, l(0.000000), r1.z
and r1.x, r1.w, r1.x
movc r2.xyzw, r1.xxxx, l(1.000000,0,0,00.496093750), l(-1.000000,766799.937500,875.671143,00.503906250)
add r1.x, r1.z, r2.y
lt r1.z, l(0.000000), r1.x
sqrt r1.x, r1.x
and r1.x, r1.x, r1.z
mad r1.x, r0.w, r2.x, r1.x
add r1.z, r1.y, l(-40449600.000000)
lt r1.w, l(0.000000), r1.z
sqrt r1.yz, r1.yyzy
and r1.z, r1.z, r1.w
add r1.w, r2.z, r1.z
mad r3.w, r1.z, l(0.00110629434), l(0.015625)
div r1.x, r1.x, r1.w
mad r3.z, r1.x, l(0.492187500), r2.w
dp3 r1.x, cb9[37].xyzx, cb9[36].xyzx
div r1.x, r1.x, r1.y
max r1.x, r1.x, l(-0.197500)
mul r1.x, r1.x, l(5.34962368)
max r1.z, |r1.x|, l(1.000000)
div r1.z, l(1.000000, 1.000000, 1.000000, 1.000000), r1.z
min r1.w, |r1.x|, l(1.000000)
mul r1.z, r1.z, r1.w
mul r1.w, r1.z, r1.z
mad r2.x, r1.w, l(0.0208350997), l(-0.085133)
mad r2.x, r1.w, r2.x, l(0.180141)
mad r2.x, r1.w, r2.x, l(-0.330299497)
mad r1.w, r1.w, r2.x, l(0.999866)
mul r2.x, r1.w, r1.z
mad r2.x, r2.x, l(-2.000000), l(1.57079637)
lt r2.y, l(1.000000), |r1.x|
min r1.x, r1.x, l(1.000000)
lt r1.x, r1.x, -r1.x
and r2.x, r2.y, r2.x
mad r1.z, r1.z, r1.w, r2.x
movc r1.x, r1.x, -r1.z, r1.z
mad r1.x, r1.x, l(0.909090877), l(0.740000)
mad r1.x, r1.x, l(0.484375), l(0.015625)
dp3 r0.x, r0.xyzx, cb9[36].xyzx
mul r0.y, r0.y, cb9[38].z
add r0.z, r0.x, l(1.000000)
mul r1.z, r0.z, l(3.500000)
round_ni r1.z, r1.z
add r1.x, r1.x, r1.z
mad r0.z, r0.z, l(3.500000), -r1.z
add r1.z, r1.x, l(1.000000)
mul r3.xy, r1.zxzz, l(0.125000, 0.125000, 0.000000, 0.000000)
sample_l r2.xyzw, r3.yzwy, t127.xyzw, s14, l(0.000000)
sample_l r3.xyzw, r3.xzwx, t127.xyzw, s14, l(0.000000)
mul r3.xyzw, r0.zzzz, r3.xyzw
add r0.z, -r0.z, l(1.000000)
mad r2.xyzw, r2.xyzw, r0.zzzz, r3.xyzw
max r0.z, r2.x, l(0.000100)
max r2.xyzw, r2.xyzw, l(0.000000, 0.000000, 0.000000, 0.000000)
mul r1.xzw, r2.wwww, r2.xxyz
div r1.xzw, r1.xxzw, r0.zzzz
mad r0.z, -r0.x, l(1.600000), l(1.640000)
log r0.z, |r0.z|
mul r0.z, r0.z, l(-1.500000)
exp r0.z, r0.z
mad r2.w, r0.x, r0.x, l(1.000000)
add r0.x, -r0.x, l(0.999847710)
mul r0.x, r0.x, l(144269.500000)
exp r0.x, r0.x
add r0.x, r0.x, l(1.000000)
div r0.x, l(1.000000, 1.000000, 1.000000, 1.000000), r0.x
mul r0.z, r0.z, r2.w
mul r2.w, r2.w, l(0.0596831031)
mul r3.x, r0.z, l(0.0162772108)
mov r3.yzw, l(0,1.000000,00.429629624,00.175226584)
mul r1.xzw, r1.xxzw, r3.yyxx
mul r1.xzw, r3.xxzw, r1.xxzw
mad r1.xzw, r2.xxyz, r2.wwww, r1.xxzw
mul r1.xzw, r1.xxzw, l(100.000000, 0.000000, 100.000000, 100.000000)
div r0.z, r0.w, r1.y
div r0.w, l(6360.000000), r1.y
add r1.y, r1.y, l(-6360.000000)
mad r0.w, -r0.w, r0.w, l(1.000000)
lt r2.x, l(0.000000), r0.w
sqrt r0.w, r0.w
and r0.w, r0.w, r2.x
lt r0.w, r0.z, -r0.w
add r0.z, r0.z, l(0.150000)
mul r0.xz, r0.xxzx, l(100.000000, 0.000000, 12.262105, 0.000000)
mul r2.x, r1.y, l(0.0166666675)
lt r1.y, l(0.000000), r1.y
sqrt r2.x, r2.x
and r2.y, r1.y, r2.x
max r1.y, |r0.z|, l(1.000000)
div r1.y, l(1.000000, 1.000000, 1.000000, 1.000000), r1.y
min r2.z, |r0.z|, l(1.000000)
mul r1.y, r1.y, r2.z
mul r2.z, r1.y, r1.y
mad r2.w, r2.z, l(0.0208350997), l(-0.085133)
mad r2.w, r2.z, r2.w, l(0.180141)
mad r2.w, r2.z, r2.w, l(-0.330299497)
mad r2.z, r2.z, r2.w, l(0.999866)
mul r2.w, r1.y, r2.z
mad r2.w, r2.w, l(-2.000000), l(1.57079637)
lt r3.x, l(1.000000), |r0.z|
min r0.z, r0.z, l(1.000000)
lt r0.z, r0.z, -r0.z
and r2.w, r2.w, r3.x
mad r1.y, r1.y, r2.z, r2.w
movc r0.z, r0.z, -r1.y, r1.y
mul r2.x, r0.z, l(0.666666687)
add r2.xy, r2.xyxx, l(-0.00195312500, -0.00781250000, 0.000000, 0.000000)
sample_l r2.xyzw, r2.xyxx, t0.xyzw, s14, l(0.000000)
movc r2.xyz, r0.wwww, l(0,0,0,0), r2.xyzx
mad r0.xzw, r2.xxyz, r0.xxxx, r1.xxzw
mul r0.xzw, r0.xxzw, cb9[36].wwww
mul r1.xyz, |r0.xzwx|, l(0.383170, 0.383170, 0.383170, 0.000000)
log r1.xyz, r1.xyzx
mul r1.xyz, r1.xyzx, l(0.454545468, 0.454545468, 0.454545468, 0.000000)
exp r1.xyz, r1.xyzx
mul r2.xyz, r0.xzwx, l(-1.442695, -1.442695, -1.442695, 0.000000)
lt r0.xzw, r0.xxzw, l(1.413000, 0.000000, 1.413000, 1.413000)
exp r2.xyz, r2.xyzx
add r2.xyz, -r2.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
movc r0.xzw, r0.xxzw, r1.xxyz, r2.xxyz
add r0.xzw, r0.xxzw, -cb9[39].xxyz
mul r1.x, cb9[38].z, cb9[39].w
mad r1.y, r0.y, l(-120000.000000), -r1.x
min r1.x, -r1.x, l(60.000000)
mul r1.x, r1.x, l(1.442695)
exp r1.x, r1.x
min r1.y, r1.y, l(60.000000)
mul r1.y, r1.y, l(1.442695)
exp r1.y, r1.y
add r1.y, -r1.y, r1.x
mul r1.xy, r1.xyxx, -cb9[38].wwww
mul r1.x, r1.x, l(173123.406250)
exp r1.x, r1.x
div r1.y, r1.y, r0.y
lt r0.y, l(0.000001), |r0.y|
min r1.y, r1.y, l(60.000000)
mul r1.y, r1.y, l(1.442695)
exp r1.y, r1.y
movc r0.y, r0.y, r1.y, r1.x
max r0.y, r0.y, cb9[40].x
mad o0.xyz, r0.yyyy, r0.xzwx, cb9[39].xyzx
mov o0.w, l(1.000000)
ret 
// Approximately 152 instruction slots used

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
