// Lights Shaft -- not sure if needed??

cbuffer PER_BATCH : register(b0)
{
  float4 PS_ScreenSize : packoffset(c0);
  float4 PS_HPosScale : packoffset(c1);
  float4 SunShafts_SunPos : packoffset(c2);
}

cbuffer PER_INSTANCE : register(b1)
{
  float4 PI_sunShaftsParams : packoffset(c0);
}

SamplerState _tex0_s : register(s0);
Texture2D<float4> _tex0 : register(t0);


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


void main(
  float4 v0 : SV_Position0,
  float2 v1 : TEXCOORD0,
  out float4 o0 : SV_Target0)
{
  float4 r0,r1,r2,r3,r4;
  uint4 bitmask, uiDest;
  float4 fDest;

//Fix  
float4 stereo = StereoParams.Load(0);
float4 tmp = SunShafts_SunPos;
tmp.x += stereo.x / 2;

  r0.xyzw = _tex0.Sample(_tex0_s, v1.xy).xyzw;
  
  //r1.x = PI_sunShaftsParams.x * SunShafts_SunPos.w;
  r1.x = PI_sunShaftsParams.x * tmp.w;
  
  //r1.yz = SunShafts_SunPos.xy * PS_HPosScale.xy + -v1.xy;
  r1.yz = tmp.xy * PS_HPosScale.xy + -v1.xy;
  
  r2.xy = r1.yz * r1.xx + v1.xy;
  r1.xw = r1.yz * r1.xx;
  r1.yz = r1.yz / PS_HPosScale.xy;
  r2.xyzw = _tex0.Sample(_tex0_s, r2.xy).xyzw;
  r0.xyzw = r2.xyzw * float4(0.875,0.875,0.875,0.875) + r0.xyzw;
  r2.xy = r1.xw * float2(2,2) + v1.xy;
  r2.xyzw = _tex0.Sample(_tex0_s, r2.xy).xyzw;
  r0.xyzw = r2.xyzw * float4(0.75,0.75,0.75,0.75) + r0.xyzw;
  r2.xyzw = r1.xwxw * float4(3,3,4,4) + v1.xyxy;
  r3.xyzw = _tex0.Sample(_tex0_s, r2.xy).xyzw;
  r2.xyzw = _tex0.Sample(_tex0_s, r2.zw).xyzw;
  r0.xyzw = r3.xyzw * float4(0.625,0.625,0.625,0.625) + r0.xyzw;
  r0.xyzw = r2.xyzw * float4(0.5,0.5,0.5,0.5) + r0.xyzw;
  r2.xyzw = r1.xwxw * float4(5,5,6,6) + v1.xyxy;
  r1.xw = r1.xw * float2(7,7) + v1.xy;
  r3.xyzw = _tex0.Sample(_tex0_s, r1.xw).xyzw;
  r4.xyzw = _tex0.Sample(_tex0_s, r2.xy).xyzw;
  r2.xyzw = _tex0.Sample(_tex0_s, r2.zw).xyzw;
  r0.xyzw = r4.xyzw * float4(0.375,0.375,0.375,0.375) + r0.xyzw;
  r0.xyzw = r2.xyzw * float4(0.25,0.25,0.25,0.25) + r0.xyzw;
  r0.xyzw = r3.xyzw * float4(0.125,0.125,0.125,0.125) + r0.xyzw;
  r1.xw = PS_HPosScale.xy * PS_ScreenSize.yx;
  r1.x = 1.33299994 * r1.x;
  r2.y = r1.x / r1.w;
  r2.x = 1;
  r1.xy = r2.xy * r1.yz;
  r1.x = dot(r1.xy, r1.xy);
  r1.x = sqrt(r1.x);
  r1.x = saturate(PI_sunShaftsParams.y * r1.x);
  r1.x = 1 + -r1.x;
  r1.y = saturate(SunShafts_SunPos.w);
  r1.x = r1.y * r1.x;
  r0.xyz = r1.xxx * r0.xyz;
  r0.xyz = float3(0.25,0.25,0.25) * r0.xyz;
  o0.xyz = r0.xyz;
  r0.x = saturate(SunShafts_SunPos.w * 0.100000001 + 0.899999976);
  r0.x = r0.w * 0.25 + -r0.x;
  o0.w = 1 + r0.x;
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Original ASM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.960.8229
//
//
// Buffer Definitions: 
//
// cbuffer PER_BATCH
// {
//
//   float4 PS_ScreenSize;              // Offset:    0 Size:    16
//   float4 PS_HPosScale;               // Offset:   16 Size:    16
//   float4 SunShafts_SunPos;           // Offset:   32 Size:    16
//
// }
//
// cbuffer PER_INSTANCE
// {
//
//   float4 PI_sunShaftsParams;         // Offset:    0 Size:    16
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// _tex0                             sampler      NA          NA    0        1
// _tex0                             texture  float4          2d    0        1
// PER_BATCH                         cbuffer      NA          NA    0        1
// PER_INSTANCE                      cbuffer      NA          NA    1        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float       
// TEXCOORD                 0   xy          1     NONE   float   xy  
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[3], immediateIndexed
dcl_constantbuffer cb1[1], immediateIndexed
dcl_sampler s0, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_input_ps linear v1.xy
dcl_output o0.xyzw
dcl_temps 5
sample_indexable(texture2d)(float,float,float,float) r0.xyzw, v1.xyxx, t0.xyzw, s0
mul r1.x, cb0[2].w, cb1[0].x
mad r1.yz, cb0[2].xxyx, cb0[1].xxyx, -v1.xxyx
mad r2.xy, r1.yzyy, r1.xxxx, v1.xyxx
mul r1.xw, r1.xxxx, r1.yyyz
div r1.yz, r1.yyzy, cb0[1].xxyx
sample_indexable(texture2d)(float,float,float,float) r2.xyzw, r2.xyxx, t0.xyzw, s0
mad r0.xyzw, r2.xyzw, l(0.875000, 0.875000, 0.875000, 0.875000), r0.xyzw
mad r2.xy, r1.xwxx, l(2.000000, 2.000000, 0.000000, 0.000000), v1.xyxx
sample_indexable(texture2d)(float,float,float,float) r2.xyzw, r2.xyxx, t0.xyzw, s0
mad r0.xyzw, r2.xyzw, l(0.750000, 0.750000, 0.750000, 0.750000), r0.xyzw
mad r2.xyzw, r1.xwxw, l(3.000000, 3.000000, 4.000000, 4.000000), v1.xyxy
sample_indexable(texture2d)(float,float,float,float) r3.xyzw, r2.xyxx, t0.xyzw, s0
sample_indexable(texture2d)(float,float,float,float) r2.xyzw, r2.zwzz, t0.xyzw, s0
mad r0.xyzw, r3.xyzw, l(0.625000, 0.625000, 0.625000, 0.625000), r0.xyzw
mad r0.xyzw, r2.xyzw, l(0.500000, 0.500000, 0.500000, 0.500000), r0.xyzw
mad r2.xyzw, r1.xwxw, l(5.000000, 5.000000, 6.000000, 6.000000), v1.xyxy
mad r1.xw, r1.xxxw, l(7.000000, 0.000000, 0.000000, 7.000000), v1.xxxy
sample_indexable(texture2d)(float,float,float,float) r3.xyzw, r1.xwxx, t0.xyzw, s0
sample_indexable(texture2d)(float,float,float,float) r4.xyzw, r2.xyxx, t0.xyzw, s0
sample_indexable(texture2d)(float,float,float,float) r2.xyzw, r2.zwzz, t0.xyzw, s0
mad r0.xyzw, r4.xyzw, l(0.375000, 0.375000, 0.375000, 0.375000), r0.xyzw
mad r0.xyzw, r2.xyzw, l(0.250000, 0.250000, 0.250000, 0.250000), r0.xyzw
mad r0.xyzw, r3.xyzw, l(0.125000, 0.125000, 0.125000, 0.125000), r0.xyzw
mul r1.xw, cb0[0].yyyx, cb0[1].xxxy
mul r1.x, r1.x, l(1.333000)
div r2.y, r1.x, r1.w
mov r2.x, l(1.000000)
mul r1.xy, r1.yzyy, r2.xyxx
dp2 r1.x, r1.xyxx, r1.xyxx
sqrt r1.x, r1.x
mul_sat r1.x, r1.x, cb1[0].y
add r1.x, -r1.x, l(1.000000)
mov_sat r1.y, cb0[2].w
mul r1.x, r1.x, r1.y
mul r0.xyz, r0.xyzx, r1.xxxx
mul r0.xyz, r0.xyzx, l(0.250000, 0.250000, 0.250000, 0.000000)
mov o0.xyz, r0.xyzx
mad_sat r0.x, cb0[2].w, l(0.100000), l(0.900000)
mad r0.x, r0.w, l(0.250000), -r0.x
add o0.w, r0.x, l(1.000000)
ret 
// Approximately 42 instruction slots used

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