// Sun

cbuffer g_HosekModelVS_CB : register(b0)
{

  struct
  {
    float4 sunAngles;
    float4 A;
    float4 B;
    float4 C;
    float4 D;
    float4 E;
    float4 F;
    float4 G;
    float4 H;
    float4 I;
    float4 meanLuminanceSRGB;
    float4 s;
    float4 pows;
    float4 inv_pows_minus_powe;
  } g_HosekModelVS : packoffset(c0);

}

cbuffer g_FogScatteringTextureVS_CB : register(b1)
{

  struct
  {
    float4 fogAlbedo;
    float4 ambientLightColour;
    float4 linearLightColour;
    float4 lightDir;
  } g_FogScatteringTextureVS : packoffset(c0);

}

cbuffer g_SkyVS_CB : register(b2)
{

  struct
  {
    row_major float4x4 view;
    row_major float4x4 viewRotated;
    float4 skyParams;
    float4 spaceParams;
  } g_SkyVS : packoffset(c0);

}

cbuffer g_CelestialBodyCommonVS_CB : register(b3)
{

  struct
  {
    row_major float4x4 modelViewProjection;
    float4 planetariumParams;
  } g_CelestialBodyCommonVS : packoffset(c0);

}

cbuffer g_CelestialBodyVS_CB : register(b4)
{

  struct
  {
    row_major float4x4 rotation;
    float4 scale;
  } g_CelestialBodyVS : packoffset(c0);

}



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


void main(
  float4 v0 : POSITION0,
  float2 v1 : TEXCOORD0,
  out float4 o0 : SV_Position0,
  out float4 o1 : TEXCOORD0,
  out float4 o2 : TEXCOORD1,
  out float4 o3 : TEXCOORD2,
  out float4 o4 : TEXCOORD3)
{
  float4 r0,r1,r2,r3,r4,r5;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.xy = v0.yx * g_CelestialBodyVS.scale.yx + float2(0.5,0.5);
  r0.xy = float2(3.14159274,3.14159274) * r0.xy;
  sincos(r0.xy, r0.xy, r1.xy);
  r0.z = r1.y * -r0.x;
  r1.xyz = g_CelestialBodyVS.rotation._m10_m11_m12 * -r1.xxx;
  r0.x = r0.x * r0.y;
  r0.yzw = r0.zzz * g_CelestialBodyVS.rotation._m00_m01_m02 + r1.xyz;
  r0.xyz = r0.xxx * g_CelestialBodyVS.rotation._m20_m21_m22 + r0.yzw;
  r1.xyzw = g_CelestialBodyCommonVS.modelViewProjection._m10_m11_m13_m13 * r0.yyyy;
  r1.xyzw = r0.xxxx * g_CelestialBodyCommonVS.modelViewProjection._m00_m01_m03_m03 + r1.xyzw;
  o0.xyzw = r0.zzzz * g_CelestialBodyCommonVS.modelViewProjection._m20_m21_m23_m23 + r1.xyzw;
  
  //Fix
  float4 stereo = StereoParams.Load(0);
  o0.x -= stereo.x * (o0.w - stereo.y) - stereo.x;
  
  o1.xy = v1.xy;
  o1.zw = float2(0,0);
  r0.w = r0.y * g_SkyVS.spaceParams.x + g_SkyVS.spaceParams.y;
  r1.x = dot(r0.xzw, r0.xzw);
  r1.x = rsqrt(r1.x);
  r1.xyzw = r1.xxxx * r0.wxwz;
  r1.xyzw = max(float4(0.00999999978,-1,0.00999999978,-1), r1.xyzw);
  r0.w = -r1.z * r1.z + 1;
  r0.w = max(0, r0.w);
  r0.w = sqrt(r0.w);
  r0.w = g_HosekModelVS.sunAngles.x * r0.w;
  r1.y = dot(r1.yw, g_HosekModelVS.sunAngles.zw);
  r1.w = g_HosekModelVS.sunAngles.y * r1.z;
  r0.w = r0.w * r1.y + r1.w;
  r1.y = saturate(1 + -r0.w);
  r1.y = sqrt(r1.y);
  r1.w = -r0.w * 0.155972004 + 1.56466997;
  r1.y = r1.y * r1.w;
  r2.xyz = g_HosekModelVS.E.xyz * r1.yyy;
  r2.xyz = float3(1.44269502,1.44269502,1.44269502) * r2.xyz;
  r2.xyz = exp2(r2.xyz);
  r2.xyz = g_HosekModelVS.D.xyz * r2.xyz + g_HosekModelVS.C.xyz;
  r1.y = r0.w * r0.w;
  r3.xyz = g_HosekModelVS.H.xyz * r0.www;
  r2.xyz = g_HosekModelVS.F.xyz * r1.yyy + r2.xyz;
  r4.xyz = g_HosekModelVS.G.xyz * r1.yyy + g_HosekModelVS.G.xyz;
  r5.xyz = g_HosekModelVS.H.xyz * g_HosekModelVS.H.xyz + float3(1,1,1);
  r3.xyz = -r3.xyz * float3(2,2,2) + r5.xyz;
  r3.xyz = log2(abs(r3.xyz));
  r3.xyz = float3(-1.5,-1.5,-1.5) * r3.xyz;
  r3.xyz = exp2(r3.xyz);
  r2.xyz = r4.xyz * r3.xyz + r2.xyz;
  r0.w = sqrt(r1.z);
  r2.xyz = g_HosekModelVS.I.xyz * r0.www + r2.xyz;
  r1.yzw = g_HosekModelVS.B.xyz / r1.zzz;
  r0.w = min(1, r1.x);
  r0.w = 1 + -r0.w;
  r0.w = r0.w * r0.w + -1;
  r0.w = g_SkyVS.spaceParams.z * r0.w + 1;
  o3.w = g_SkyVS.spaceParams.w * -r0.w + r0.w;
  r1.xyz = float3(1.44269502,1.44269502,1.44269502) * r1.yzw;
  r1.xyz = exp2(r1.xyz);
  r1.xyz = g_HosekModelVS.A.xyz * r1.xyz + float3(1,1,1);
  r1.xyz = r1.xyz * r2.xyz;
  r1.xyz = g_HosekModelVS.meanLuminanceSRGB.xyz * r1.xyz;
  r1.xyz = max(float3(0,0,0), r1.xyz);
  r1.xyz = max(g_HosekModelVS.s.xyz, r1.xyz);
  r1.xyz = sqrt(r1.xyz);
  r1.xyz = g_HosekModelVS.pows.xyz + -r1.xyz;
  r1.xyz = g_HosekModelVS.inv_pows_minus_powe.xyz * r1.xyz;
  r1.xyz = r1.xyz * r1.xyz;
  o2.xyz = g_SkyVS.skyParams.www * r1.xyz;
  o2.w = 0;
  r0.w = saturate(dot(-g_FogScatteringTextureVS.lightDir.xyz, r0.xyz));
  o4.xyz = r0.xyz;
  r0.x = log2(r0.w);
  r0.x = g_FogScatteringTextureVS.ambientLightColour.w * r0.x;
  r0.x = exp2(r0.x);
  r0.x = g_FogScatteringTextureVS.linearLightColour.w * r0.x;
  r0.xyz = r0.xxx * g_FogScatteringTextureVS.linearLightColour.xyz + g_FogScatteringTextureVS.ambientLightColour.xyz;
  o3.xyz = g_FogScatteringTextureVS.fogAlbedo.xyz * r0.xyz;
  o4.w = 0;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
//   using 3Dmigoto v1.3.11 on Sun Jun 24 17:16:24 2018
//
//
// Buffer Definitions:
//
// cbuffer g_HosekModelVS_CB
// {
//
//   struct HosekModelVS
//   {
//
//       float4 sunAngles;              // Offset:    0
//       float4 A;                      // Offset:   16
//       float4 B;                      // Offset:   32
//       float4 C;                      // Offset:   48
//       float4 D;                      // Offset:   64
//       float4 E;                      // Offset:   80
//       float4 F;                      // Offset:   96
//       float4 G;                      // Offset:  112
//       float4 H;                      // Offset:  128
//       float4 I;                      // Offset:  144
//       float4 meanLuminanceSRGB;      // Offset:  160
//       float4 s;                      // Offset:  176
//       float4 pows;                   // Offset:  192
//       float4 inv_pows_minus_powe;    // Offset:  208
//
//   } g_HosekModelVS;                  // Offset:    0 Size:   224
//
// }
//
// cbuffer g_FogScatteringTextureVS_CB
// {
//
//   struct FogScatteringTextureVS
//   {
//
//       float4 fogAlbedo;              // Offset:    0
//       float4 ambientLightColour;     // Offset:   16
//       float4 linearLightColour;      // Offset:   32
//       float4 lightDir;               // Offset:   48
//
//   } g_FogScatteringTextureVS;        // Offset:    0 Size:    64
//
// }
//
// cbuffer g_SkyVS_CB
// {
//
//   struct SkyVS
//   {
//
//       row_major float4x4 view;       // Offset:    0
//       row_major float4x4 viewRotated;// Offset:   64
//       float4 skyParams;              // Offset:  128
//       float4 spaceParams;            // Offset:  144
//
//   } g_SkyVS;                         // Offset:    0 Size:   160
//
// }
//
// cbuffer g_CelestialBodyCommonVS_CB
// {
//
//   struct CelestialBodyCommonVS
//   {
//
//       row_major float4x4 modelViewProjection;// Offset:    0
//       float4 planetariumParams;      // Offset:   64
//
//   } g_CelestialBodyCommonVS;         // Offset:    0 Size:    80
//
// }
//
// cbuffer g_CelestialBodyVS_CB
// {
//
//   struct CelestialBodyVS
//   {
//
//       row_major float4x4 rotation;   // Offset:    0
//       float4 scale;                  // Offset:   64
//
//   } g_CelestialBodyVS;               // Offset:    0 Size:    80
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// g_HosekModelVS_CB                 cbuffer      NA          NA    0        1
// g_FogScatteringTextureVS_CB       cbuffer      NA          NA    1        1
// g_SkyVS_CB                        cbuffer      NA          NA    2        1
// g_CelestialBodyCommonVS_CB        cbuffer      NA          NA    3        1
// g_CelestialBodyVS_CB              cbuffer      NA          NA    4        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// POSITION                 0   xyzw        0     NONE   float   xy
// TEXCOORD                 0   xy          1     NONE   float   xy
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float   xyzw
// TEXCOORD                 0   xyzw        1     NONE   float   xyzw
// TEXCOORD                 1   xyzw        2     NONE   float   xyzw
// TEXCOORD                 2   xyzw        3     NONE   float   xyzw
// TEXCOORD                 3   xyzw        4     NONE   float   xyzw
//
vs_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[14], immediateIndexed
dcl_constantbuffer cb1[4], immediateIndexed
dcl_constantbuffer cb2[10], immediateIndexed
dcl_constantbuffer cb3[3], immediateIndexed
dcl_constantbuffer cb4[5], immediateIndexed
dcl_input v0.xy
dcl_input v1.xy
dcl_output_siv o0.xyzw, position
dcl_output o1.xyzw
dcl_output o2.xyzw
dcl_output o3.xyzw
dcl_output o4.xyzw
dcl_temps 6
mad r0.xy, v0.yxyy, cb4[4].yxyy, l(0.500000, 0.500000, 0.000000, 0.000000)
mul r0.xy, r0.xyxx, l(3.14159274, 3.14159274, 0.000000, 0.000000)
sincos r0.xy, r1.xy, r0.xyxx
mul r0.z, -r0.x, r1.y
mul r1.xyz, -r1.xxxx, cb4[1].xyzx
mul r0.x, r0.y, r0.x
mad r0.yzw, r0.zzzz, cb4[0].xxyz, r1.xxyz
mad r0.xyz, r0.xxxx, cb4[2].xyzx, r0.yzwy
mul r1.xyzw, r0.yyyy, cb3[1].xyww
mad r1.xyzw, r0.xxxx, cb3[0].xyww, r1.xyzw
mad o0.xyzw, r0.zzzz, cb3[2].xyww, r1.xyzw
mov o1.xy, v1.xyxx
mov o1.zw, l(0,0,0,0)
mad r0.w, r0.y, cb2[9].x, cb2[9].y
dp3 r1.x, r0.xzwx, r0.xzwx
rsq r1.x, r1.x
mul r1.xyzw, r0.wxwz, r1.xxxx
max r1.xyzw, r1.xyzw, l(0.010000, -1.000000, 0.010000, -1.000000)
mad r0.w, -r1.z, r1.z, l(1.000000)
max r0.w, r0.w, l(0.000000)
sqrt r0.w, r0.w
mul r0.w, r0.w, cb0[0].x
dp2 r1.y, r1.ywyy, cb0[0].zwzz
mul r1.w, r1.z, cb0[0].y
mad r0.w, r0.w, r1.y, r1.w
add_sat r1.y, -r0.w, l(1.000000)
sqrt r1.y, r1.y
mad r1.w, -r0.w, l(0.155972), l(1.564670)
mul r1.y, r1.w, r1.y
mul r2.xyz, r1.yyyy, cb0[5].xyzx
mul r2.xyz, r2.xyzx, l(1.442695, 1.442695, 1.442695, 0.000000)
exp r2.xyz, r2.xyzx
mad r2.xyz, cb0[4].xyzx, r2.xyzx, cb0[3].xyzx
mul r1.y, r0.w, r0.w
mul r3.xyz, r0.wwww, cb0[8].xyzx
mad r2.xyz, cb0[6].xyzx, r1.yyyy, r2.xyzx
mad r4.xyz, cb0[7].xyzx, r1.yyyy, cb0[7].xyzx
mad r5.xyz, cb0[8].xyzx, cb0[8].xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
mad r3.xyz, -r3.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), r5.xyzx
log r3.xyz, |r3.xyzx|
mul r3.xyz, r3.xyzx, l(-1.500000, -1.500000, -1.500000, 0.000000)
exp r3.xyz, r3.xyzx
mad r2.xyz, r4.xyzx, r3.xyzx, r2.xyzx
sqrt r0.w, r1.z
mad r2.xyz, cb0[9].xyzx, r0.wwww, r2.xyzx
div r1.yzw, cb0[2].xxyz, r1.zzzz
min r0.w, r1.x, l(1.000000)
add r0.w, -r0.w, l(1.000000)
mad r0.w, r0.w, r0.w, l(-1.000000)
mad r0.w, cb2[9].z, r0.w, l(1.000000)
mad o3.w, cb2[9].w, -r0.w, r0.w
mul r1.xyz, r1.yzwy, l(1.442695, 1.442695, 1.442695, 0.000000)
exp r1.xyz, r1.xyzx
mad r1.xyz, cb0[1].xyzx, r1.xyzx, l(1.000000, 1.000000, 1.000000, 0.000000)
mul r1.xyz, r2.xyzx, r1.xyzx
mul r1.xyz, r1.xyzx, cb0[10].xyzx
max r1.xyz, r1.xyzx, l(0.000000, 0.000000, 0.000000, 0.000000)
max r1.xyz, r1.xyzx, cb0[11].xyzx
sqrt r1.xyz, r1.xyzx
add r1.xyz, -r1.xyzx, cb0[12].xyzx
mul r1.xyz, r1.xyzx, cb0[13].xyzx
mul r1.xyz, r1.xyzx, r1.xyzx
mul o2.xyz, r1.xyzx, cb2[8].wwww
mov o2.w, l(0)
dp3_sat r0.w, -cb1[3].xyzx, r0.xyzx
mov o4.xyz, r0.xyzx
log r0.x, r0.w
mul r0.x, r0.x, cb1[1].w
exp r0.x, r0.x
mul r0.x, r0.x, cb1[2].w
mad r0.xyz, r0.xxxx, cb1[2].xyzx, cb1[1].xyzx
mul o3.xyz, r0.xyzx, cb1[0].xyzx
mov o4.w, l(0)
ret
// Approximately 74 instruction slots used

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