//ssdo

cbuffer PER_BATCH : register(b0)
{
  float4 SvoTreeSettings3 : packoffset(c0);
  float4 SvoParamsMisc2 : packoffset(c1);
  float4 SvoTreeSettings2 : packoffset(c2);
  float4 PS_NearFarClipDist : packoffset(c3);
  row_major float3x4 SVO_ReprojectionMatrix : packoffset(c4);
  float4 SvoTreeSettings4 : packoffset(c7);
  float4 SvoTreeSettings0 : packoffset(c8);
  float4 PS_ScreenSize : packoffset(c9);
  float4 SVO_TargetResScale : packoffset(c10);
  float4 SvoTreeSettings1 : packoffset(c11);
  float4 SVO_SrcPixSize : packoffset(c12);
  float4 PS_WorldViewPos : packoffset(c13);
}

SamplerState sceneDepthMapSampler_s : register(s4);
SamplerState sceneGBuffer1_s : register(s5);
SamplerState sceneFinOutPrev_s : register(s9);
SamplerState sceneAldSamplerMin_s : register(s10);
SamplerState sceneRgbSamplerMin_s : register(s11);
SamplerState sceneAldSamplerMax_s : register(s12);
SamplerState sceneRgbSamplerMax_s : register(s13);
Texture2D<float4> sceneDepthMapSampler : register(t4);
Texture2D<float4> sceneGBuffer1 : register(t5);
Texture2D<float4> sceneFinOutPrev : register(t9);
Texture2D<float4> sceneAldSamplerMin : register(t10);
Texture2D<float4> sceneRgbSamplerMin : register(t11);
Texture2D<float4> sceneAldSamplerMax : register(t12);
Texture2D<float4> sceneRgbSamplerMax : register(t13);

cbuffer PER_FRAME : register(b13)
{
  row_major float4x4 g_VS_ViewProjMatr : packoffset(c0);
  float4 g_VS_SunLightDir : packoffset(c4);
  float4 g_VS_WorldViewPos : packoffset(c6);
  float4 g_VS_ScreenSize : packoffset(c7);
  float4 g_VS_AnimGenParams : packoffset(c8);
  float4 g_VS_NearFarClipDist : packoffset(c9);
  row_major float4x4 g_VS_ViewProjZeroMatr : packoffset(c10);
}

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

void main(
  float4 v0 : SV_Position0,
  float4 v1 : TEXCOORD0,
  float4 v2 : TEXCOORD1,
  out float4 o0 : SV_Target0,
  out float4 o1 : SV_Target1,
  out float4 o2 : SV_Target2,
  out float4 o3 : SV_Target3)
{
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.w = sceneDepthMapSampler.Sample(sceneDepthMapSampler_s, v1.xy).x;

  float4 stereo = StereoParams.Load(0);
float4 params = IniParams.Load(0);
row_major matrix ivp = inverse(g_VS_ViewProjMatr);
float4 tmp = mul(g_VS_ViewProjMatr, v2 * r0.w);
tmp.x -= stereo.x * (tmp.w - stereo.y);
v2 = mul(ivp, tmp) / r0.w;
  
  r1.xyzw = sceneGBuffer1.Sample(sceneGBuffer1_s, v1.xy).xyzw;
  r1.xyz = r1.xyz * float3(2,2,2) + float3(-1,-1,-1);
  r2.x = dot(r1.xyz, r1.xyz);
  r2.x = rsqrt(r2.x);
  r1.xyz = r2.xxx * r1.xyz;
  r1.w = 3.99609375 * r1.w;
  r2.x = floor(r1.w);
  r2.x = cmp(r2.x == 1.000000);
  r1.w = frac(r1.w);
  r1.w = r2.x ? r1.w : 0;
  r2.xy = float2(0.5,0.5) / PS_ScreenSize.xy;
  r3.xyzw = float4(0,0,0,0);
  r4.xyz = float3(0,0,0);
  r2.zw = float2(0,-1);
  while (true) {
    r4.w = cmp(1 < (int)r2.w);
    if (r4.w != 0) break;
    r5.x = (int)r2.w;
    r6.xyzw = r3.xyzw;
    r7.xyz = r4.xyz;
    r4.w = r2.z;
    r5.z = -1;
    while (true) {
      r5.w = cmp(1 < (int)r5.z);
      if (r5.w != 0) break;
      r5.y = (int)r5.z;
      r5.yw = SVO_SrcPixSize.xy * r5.xy;
      r5.yw = r5.yw * float2(0.5,0.5) + v1.xy;
      r5.yw = r5.yw + r2.xy;
      r8.xyzw = sceneRgbSamplerMin.SampleLevel(sceneRgbSamplerMin_s, r5.yw, 0).xyzw;
      r9.xyzw = sceneAldSamplerMin.SampleLevel(sceneAldSamplerMin_s, r5.yw, 0).xyzw;
      r10.xyzw = sceneRgbSamplerMax.SampleLevel(sceneRgbSamplerMax_s, r5.yw, 0).xyzw;
      r11.xyzw = sceneAldSamplerMax.SampleLevel(sceneAldSamplerMax_s, r5.yw, 0).xyzw;
      r5.y = -r8.w + r0.w;
      r5.w = r10.w + -r8.w;
      r5.w = max(9.99999975e-005, r5.w);
      r5.y = saturate(r5.y / r5.w);
      r10.xyzw = r10.xyzw + -r8.xyzw;
      r8.xyzw = r5.yyyy * r10.xyzw + r8.xyzw;
      r10.xyzw = r11.xyzw + -r9.xyzw;
      r9.xyzw = r5.yyyy * r10.xyzw + r9.xyzw;
      r5.y = dot(r9.xyz, r9.xyz);
      r5.w = rsqrt(r5.y);
      r10.xyz = r9.xyz * r5.www;
      r5.w = dot(r10.xyz, r1.xyz);
      r5.w = r1.w * 4 + r5.w;
      r5.w = saturate(-0.349999994 + r5.w);
      r5.y = sqrt(r5.y);
      r7.w = max(9.99999975e-005, r9.w);
      r5.y = r5.y / r7.w;
      r5.y = 8 * r5.y;
      r5.y = min(1, r5.y);
      r5.w = -0.25 + r5.w;
      r5.y = r5.y * r5.w + 0.250999987;
      r5.w = r0.w / r8.w;
      r5.w = 1 + -r5.w;
      r5.w = 0.119999997 + -abs(r5.w);
      r5.w = 4 * r5.w;
      r5.w = max(0, r5.w);
      r5.w = 0.00100000005 + r5.w;
      r7.w = r5.w * r5.y;
      r7.xyz = r8.xyz * r7.www + r7.xyz;
      r6.xyzw = r9.xyzw * r7.wwww + r6.xyzw;
      r4.w = r5.w * r5.y + r4.w;
      r5.z = (int)r5.z + 2;
    }
    r3.xyzw = r6.xyzw;
    r4.xyz = r7.xyz;
    r2.z = r4.w;
    r2.w = (int)r2.w + 2;
  }
  r2.x = cmp(0 != r2.z);
  r5.xyz = r4.xyz / r2.zzz;
  r6.xyzw = r3.xyzw / r2.zzzz;
  r2.yzw = r2.xxx ? r5.xyz : r4.xyz;
  r3.xyzw = r2.xxxx ? r6.xyzw : r3.xyzw;
  r2.x = dot(r3.xyz, r3.xyz);
  r4.x = sqrt(r2.x);
  r1.w = 1 + -r1.w;
  r4.y = r4.x * r1.w;
  r2.x = rsqrt(r2.x);
  r3.xyz = r3.xyz * r2.xxx;
  r1.x = saturate(dot(r1.xyz, r3.xyz));
  r1.y = -r4.x * r1.w + r3.w;
  r1.y = max(0, r1.y);
  r1.x = r4.y * r1.x + r1.y;
  r0.xyz = r2.yzw * r1.xxx;
  r1.w = 1 / r0.w;
  r1.xy = v1.xy;
  r1.z = 1;
  r2.x = dot(SVO_ReprojectionMatrix._m00_m01_m02_m03, r1.xyzw);
  r2.y = dot(SVO_ReprojectionMatrix._m10_m11_m12_m13, r1.xyzw);
  r1.x = dot(SVO_ReprojectionMatrix._m20_m21_m22_m23, r1.xyzw);
  r1.xy = r2.xy / r1.xx;
  r1.z = -SvoParamsMisc2.y + r0.w;
  r1.w = 0.5 * SvoParamsMisc2.y;
  r1.z = saturate(r1.z / r1.w);
  r1.xy = -v1.xy + r1.xy;
  r1.xy = r1.zz * r1.xy + v1.xy;
  r2.xyzw = sceneFinOutPrev.SampleLevel(sceneFinOutPrev_s, r1.xy, 0).xyzw;
  r1.zw = cmp(r1.xy < float2(0,0));
  r1.xy = cmp(float2(1,1) < r1.xy);
  r1.x = (int)r1.x | (int)r1.z;
  r1.x = (int)r1.w | (int)r1.x;
  r1.x = (int)r1.y | (int)r1.x;
  r1.x = r1.x ? 1.000000 : 0;
  r1.y = PS_NearFarClipDist.y * r0.w;
  r1.y = r1.y * 0.5 + 1;
  r1.y = SVO_TargetResScale.z / r1.y;
  r1.y = SVO_TargetResScale.w + r1.y;
  r1.x = r1.x + r1.y;
  r1.x = 0.0500000007 + r1.x;
  r1.y = r0.w / r2.w;
  r1.y = 1 + -r1.y;
  r1.x = saturate(abs(r1.y) * 8 + r1.x);
  r0.xyzw = -r2.xyzw + r0.xyzw;
  r0.xyzw = r1.xxxx * r0.xyzw + r2.xyzw;

//one eye light fix (non SLI)
  r0.xyzw = max(float4(0.2,0.2,0.2,0.2), r0.xyzw);
  o0.xyzw = min(float4(0.07,0.07,0.07,0.07), r0.xyzw);
//  r0.xyzw = max(float4(0,0,0,0), r0.xyzw);
//  o0.xyzw = min(float4(8,8,8,8), r0.xyzw);


  o1.xyzw = float4(0,0,0,0);
  o2.xyzw = float4(0,0,0,0);
  o3.xyzw = float4(0,0,0,0);




  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) HLSL Shader Compiler 9.30.960.8229
//
//   using 3Dmigoto v1.3.10 on Fri May 04 17:26:21 2018
//
//
// Buffer Definitions:
//
// cbuffer PER_BATCH
// {
//
//   float4 SvoTreeSettings3;           // Offset:    0 Size:    16 [unused]
//   float4 SvoParamsMisc2;             // Offset:   16 Size:    16
//   float4 SvoTreeSettings2;           // Offset:   32 Size:    16 [unused]
//   float4 PS_NearFarClipDist;         // Offset:   48 Size:    16
//   row_major float3x4 SVO_ReprojectionMatrix;// Offset:   64 Size:    48
//   float4 SvoTreeSettings4;           // Offset:  112 Size:    16 [unused]
//   float4 SvoTreeSettings0;           // Offset:  128 Size:    16 [unused]
//   float4 PS_ScreenSize;              // Offset:  144 Size:    16
//   float4 SVO_TargetResScale;         // Offset:  160 Size:    16
//   float4 SvoTreeSettings1;           // Offset:  176 Size:    16 [unused]
//   float4 SVO_SrcPixSize;             // Offset:  192 Size:    16
//
// }
//
//
// Resource Bindings:
//
// Name                                 Type  Format         Dim Slot Elements
// ------------------------------ ---------- ------- ----------- ---- --------
// sceneDepthMapSampler              sampler      NA          NA    4        1
// sceneGBuffer1                     sampler      NA          NA    5        1
// sceneFinOutPrev                   sampler      NA          NA    9        1
// sceneAldSamplerMin                sampler      NA          NA   10        1
// sceneRgbSamplerMin                sampler      NA          NA   11        1
// sceneAldSamplerMax                sampler      NA          NA   12        1
// sceneRgbSamplerMax                sampler      NA          NA   13        1
// sceneDepthMapSampler              texture  float4          2d    4        1
// sceneGBuffer1                     texture  float4          2d    5        1
// sceneFinOutPrev                   texture  float4          2d    9        1
// sceneAldSamplerMin                texture  float4          2d   10        1
// sceneRgbSamplerMin                texture  float4          2d   11        1
// sceneAldSamplerMax                texture  float4          2d   12        1
// sceneRgbSamplerMax                texture  float4          2d   13        1
// PER_BATCH                         cbuffer      NA          NA    0        1
//
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Position              0   xyzw        0      POS   float
// TEXCOORD                 0   xyzw        1     NONE   float   xy
// TEXCOORD                 1   xyzw        2     NONE   float
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_Target                0   xyzw        0   TARGET   float   xyzw
// SV_Target                1   xyzw        1   TARGET   float   xyzw
// SV_Target                2   xyzw        2   TARGET   float   xyzw
// SV_Target                3   xyzw        3   TARGET   float   xyzw
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer cb0[13], immediateIndexed
dcl_sampler s4, mode_default
dcl_sampler s5, mode_default
dcl_sampler s9, mode_default
dcl_sampler s10, mode_default
dcl_sampler s11, mode_default
dcl_sampler s12, mode_default
dcl_sampler s13, mode_default
dcl_resource_texture2d (float,float,float,float) t4
dcl_resource_texture2d (float,float,float,float) t5
dcl_resource_texture2d (float,float,float,float) t9
dcl_resource_texture2d (float,float,float,float) t10
dcl_resource_texture2d (float,float,float,float) t11
dcl_resource_texture2d (float,float,float,float) t12
dcl_resource_texture2d (float,float,float,float) t13
dcl_input_ps linear v1.xy
dcl_output o0.xyzw
dcl_output o1.xyzw
dcl_output o2.xyzw
dcl_output o3.xyzw
dcl_temps 12
sample_indexable(texture2d)(float,float,float,float) r0.w, v1.xyxx, t4.yzwx, s4
sample_indexable(texture2d)(float,float,float,float) r1.xyzw, v1.xyxx, t5.xyzw, s5
mad r1.xyz, r1.xyzx, l(2.000000, 2.000000, 2.000000, 0.000000), l(-1.000000, -1.000000, -1.000000, 0.000000)
dp3 r2.x, r1.xyzx, r1.xyzx
rsq r2.x, r2.x
mul r1.xyz, r1.xyzx, r2.xxxx
mul r1.w, r1.w, l(3.99609375)
round_ni r2.x, r1.w
eq r2.x, r2.x, l(1.000000)
frc r1.w, r1.w
and r1.w, r1.w, r2.x
div r2.xy, l(0.500000, 0.500000, 0.000000, 0.000000), cb0[9].xyxx
mov r3.xyzw, l(0,0,0,0)
mov r4.xyz, l(0,0,0,0)
mov r2.zw, l(0,0,0,-1)
loop
  ilt r4.w, l(1), r2.w
  breakc_nz r4.w
  itof r5.x, r2.w
  mov r6.xyzw, r3.xyzw
  mov r7.xyz, r4.xyzx
  mov r4.w, r2.z
  mov r5.z, l(-1)
  loop
    ilt r5.w, l(1), r5.z
    breakc_nz r5.w
    itof r5.y, r5.z
    mul r5.yw, r5.xxxy, cb0[12].xxxy
    mad r5.yw, r5.yyyw, l(0.000000, 0.500000, 0.000000, 0.500000), v1.xxxy
    add r5.yw, r2.xxxy, r5.yyyw
    sample_l_indexable(texture2d)(float,float,float,float) r8.xyzw, r5.ywyy, t11.xyzw, s11, l(0.000000)
    sample_l_indexable(texture2d)(float,float,float,float) r9.xyzw, r5.ywyy, t10.xyzw, s10, l(0.000000)
    sample_l_indexable(texture2d)(float,float,float,float) r10.xyzw, r5.ywyy, t13.xyzw, s13, l(0.000000)
    sample_l_indexable(texture2d)(float,float,float,float) r11.xyzw, r5.ywyy, t12.xyzw, s12, l(0.000000)
    add r5.y, r0.w, -r8.w
    add r5.w, -r8.w, r10.w
    max r5.w, r5.w, l(0.000100)
    div_sat r5.y, r5.y, r5.w
    add r10.xyzw, -r8.xyzw, r10.xyzw
    mad r8.xyzw, r5.yyyy, r10.xyzw, r8.xyzw
    add r10.xyzw, -r9.xyzw, r11.xyzw
    mad r9.xyzw, r5.yyyy, r10.xyzw, r9.xyzw
    dp3 r5.y, r9.xyzx, r9.xyzx
    rsq r5.w, r5.y
    mul r10.xyz, r5.wwww, r9.xyzx
    dp3 r5.w, r10.xyzx, r1.xyzx
    mad r5.w, r1.w, l(4.000000), r5.w
    add_sat r5.w, r5.w, l(-0.350000)
    sqrt r5.y, r5.y
    max r7.w, r9.w, l(0.000100)
    div r5.y, r5.y, r7.w
    mul r5.y, r5.y, l(8.000000)
    min r5.y, r5.y, l(1.000000)
    add r5.w, r5.w, l(-0.250000)
    mad r5.y, r5.y, r5.w, l(0.251000)
    div r5.w, r0.w, r8.w
    add r5.w, -r5.w, l(1.000000)
    add r5.w, -|r5.w|, l(0.120000)
    mul r5.w, r5.w, l(4.000000)
    max r5.w, r5.w, l(0.000000)
    add r5.w, r5.w, l(0.001000)
    mul r7.w, r5.y, r5.w
    mad r7.xyz, r8.xyzx, r7.wwww, r7.xyzx
    mad r6.xyzw, r9.xyzw, r7.wwww, r6.xyzw
    mad r4.w, r5.w, r5.y, r4.w
    iadd r5.z, r5.z, l(2)
  endloop
  mov r3.xyzw, r6.xyzw
  mov r4.xyz, r7.xyzx
  mov r2.z, r4.w
  iadd r2.w, r2.w, l(2)
endloop
ne r2.x, l(0.000000, 0.000000, 0.000000, 0.000000), r2.z
div r5.xyz, r4.xyzx, r2.zzzz
div r6.xyzw, r3.xyzw, r2.zzzz
movc r2.yzw, r2.xxxx, r5.xxyz, r4.xxyz
movc r3.xyzw, r2.xxxx, r6.xyzw, r3.xyzw
dp3 r2.x, r3.xyzx, r3.xyzx
sqrt r4.x, r2.x
add r1.w, -r1.w, l(1.000000)
mul r4.y, r1.w, r4.x
rsq r2.x, r2.x
mul r3.xyz, r2.xxxx, r3.xyzx
dp3_sat r1.x, r1.xyzx, r3.xyzx
mad r1.y, -r4.x, r1.w, r3.w
max r1.y, r1.y, l(0.000000)
mad r1.x, r4.y, r1.x, r1.y
mul r0.xyz, r1.xxxx, r2.yzwy
div r1.w, l(1.000000, 1.000000, 1.000000, 1.000000), r0.w
mov r1.xy, v1.xyxx
mov r1.z, l(1.000000)
dp4 r2.x, cb0[4].xyzw, r1.xyzw
dp4 r2.y, cb0[5].xyzw, r1.xyzw
dp4 r1.x, cb0[6].xyzw, r1.xyzw
div r1.xy, r2.xyxx, r1.xxxx
add r1.z, r0.w, -cb0[1].y
mul r1.w, cb0[1].y, l(0.500000)
div_sat r1.z, r1.z, r1.w
add r1.xy, r1.xyxx, -v1.xyxx
mad r1.xy, r1.zzzz, r1.xyxx, v1.xyxx
sample_l_indexable(texture2d)(float,float,float,float) r2.xyzw, r1.xyxx, t9.xyzw, s9, l(0.000000)
lt r1.zw, r1.xxxy, l(0.000000, 0.000000, 0.000000, 0.000000)
lt r1.xy, l(1.000000, 1.000000, 0.000000, 0.000000), r1.xyxx
or r1.x, r1.x, r1.z
or r1.x, r1.w, r1.x
or r1.x, r1.y, r1.x
and r1.x, r1.x, l(0x3f800000)
mul r1.y, r0.w, cb0[3].y
mad r1.y, r1.y, l(0.500000), l(1.000000)
div r1.y, cb0[10].z, r1.y
add r1.y, r1.y, cb0[10].w
add r1.x, r1.y, r1.x
add r1.x, r1.x, l(0.050000)
div r1.y, r0.w, r2.w
add r1.y, -r1.y, l(1.000000)
mad_sat r1.x, |r1.y|, l(8.000000), r1.x
add r0.xyzw, r0.xyzw, -r2.xyzw
mad r0.xyzw, r1.xxxx, r0.xyzw, r2.xyzw
max r0.xyzw, r0.xyzw, l(0.000000, 0.000000, 0.000000, 0.000000)
min o0.xyzw, r0.xyzw, l(8.000000, 8.000000, 8.000000, 8.000000)
mov o1.xyzw, l(0,0,0,0)
mov o2.xyzw, l(0,0,0,0)
mov o3.xyzw, l(0,0,0,0)
ret
// Approximately 124 instruction slots used

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