//SSAO.
// ---- Created with 3Dmigoto v0.6.181 on Sun Dec 31 12:55:35 2023
Texture2D<float4> t1 : register(t1);

Texture2D<float4> t0 : register(t0);

SamplerState s1_s : register(s1);

SamplerState s0_s : register(s0);

cbuffer cb2 : register(b2)
{
  float4 cb2[15];
}

cbuffer cb0 : register(b0)
{
  float4 cb0[3];
}




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


void main(
  float4 v0 : SV_POSITION0,
  float4 v1 : TEXCOORD0,
  float4 v2 : TEXCOORD1,
  float4 v3 : TEXCOORD2,
  float4 v4 : TEXCOORD3,
  float4 v5 : TEXCOORD4,
  float4 v6 : TEXCOORD5,
  float2 v7 : TEXCOORD6,
  out float2 o0 : SV_TARGET0)
{
  float4 r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12;
  uint4 bitmask, uiDest;
  float4 fDest;
  
  float4 stereo = StereoParams.Load(0);
  //v6.x+=stereo.x*0.5;
  //v2.x+=stereo.x*0.5;
  //v3.x+=stereo.x*0.5;
  
  r0.z = t1.SampleLevel(s1_s, v6.xy, 0).x;
  r0.w = cb0[2].x / r0.z;
  r1.x = cmp(cb2[14].x < r0.w);
  if (r1.x != 0) {
    r0.xy = v7.xy * r0.zz;
    r1.xyz = t0.SampleLevel(s0_s, v6.zw, 0).xyz;
    r0.w = cb2[14].z * r0.w;
    r2.y = min(6, r0.w);
    r1.w = 1 + r2.y;
    r2.x = r0.w / r1.w;
    r0.w = 20 / r2.x;
    r1.w = cmp(r0.w < r2.y);
    r0.w = r0.w + r1.z;
    r0.w = floor(r0.w);
    r3.y = max(1, r0.w);
    r3.x = 20 / r3.y;
    r2.xy = r1.ww ? r3.xy : r2.xy;
    r3.z = t1.SampleLevel(s1_s, v3.xy, 0).x;
    r3.xy = v4.xy * r3.zz;
    r4.z = t1.SampleLevel(s1_s, v3.zy, 0).x;
    r4.xy = v5.zw * r4.zz;
    r5.z = t1.SampleLevel(s1_s, v2.xy, 0).x;
    r5.xy = v4.zw * r5.zz;
    r6.z = t1.SampleLevel(s1_s, v2.xz, 0).x;
    r6.xy = v5.xy * r6.zz;
    r7.xyz = r3.xyz + -r0.xyz;
    r8.xyz = -r4.xyz + r0.xyz;
    r0.w = dot(r7.xyz, r7.xyz);
    r1.w = dot(r8.xyz, r8.xyz);
    r0.w = cmp(r0.w < r1.w);
    r7.xyz = r0.www ? r7.xyz : r8.xyz;
    r8.xyz = r5.xyz + -r0.xyz;
    r9.xyz = -r6.xyz + r0.xyz;
    r0.w = dot(r8.xyz, r8.xyz);
    r2.z = dot(r9.xyz, r9.xyz);
    r0.w = cmp(r0.w < r2.z);
    r8.xyz = r0.www ? r8.xyz : r9.xyz;
    r8.xyz = cb0[1].zzz * r8.xyz;
    r0.w = -1 + r2.y;
    r9.y = 0;
    r2.yw = float2(0,0);
    while (true) {
      r3.w = cmp(r2.w >= 4);
      if (r3.w != 0) break;
      r3.w = 1.57079601 * r2.w;
      sincos(r3.w, r10.x, r11.x);
      r9.zw = r10.xx * r1.yx;
      r10.x = r11.x * r1.x + -r9.z;
      r10.y = r11.x * r1.y + r9.w;
      r9.zw = cb2[14].xy * r10.xy;
      r10.xy = r9.zw * r2.xx;
      r10.zw = r10.xy * r1.zz;
      r10.xyzw = cb2[14].zwzw * r10.xyzw;
      r10.xyzw = round(r10.xyzw);
      r10.zw = r10.zw * cb2[14].xy + v6.xy;
      r11.xy = cb2[14].xy * r10.xy;
      r12.xyz = r11.yyy * r8.xyz;
      r12.xyz = r11.xxx * r7.xyz + r12.xyz;
      r3.w = dot(r12.xy, r12.xy);
      r3.w = rsqrt(r3.w);
      r9.x = -r12.z * r3.w + cb0[0].y;
      r9.zw = r1.zz * r11.xy + r9.zw;
      r9.zw = cb2[14].zw * r9.zw;
      r9.zw = round(r9.zw);
      r11.xy = cb2[14].xy * r9.zw;
      r11.yzw = r11.yyy * r8.xyz;
      r11.xyz = r11.xxx * r7.xyz + r11.yzw;
      r3.w = dot(r11.xy, r11.xy);
      r3.w = rsqrt(r3.w);
      r3.w = -r11.z * r3.w + cb0[0].y;
      r4.w = r3.w * r3.w + 1;
      r4.w = rsqrt(r4.w);
      r4.w = r4.w * r3.w;
      r9.zw = r9.zw * cb2[14].xy + v6.xy;
      r11.z = t1.SampleLevel(s1_s, r9.zw, 0).x;
      r9.zw = r9.zw * v1.xy + v1.zw;
      r11.xy = r11.zz * r9.zw;
      r5.w = -r11.z + r0.z;
      r9.zw = r11.zz * r9.zw + -r0.xy;
      r6.w = dot(r9.zw, r9.zw);
      r6.w = rsqrt(r6.w);
      r5.w = r6.w * r5.w;
      r6.w = r5.w * r5.w + 1;
      r6.w = rsqrt(r6.w);
      r11.xyz = r11.xyz + -r0.xyz;
      r7.w = dot(r11.xyz, r11.xyz);
      r8.w = cmp(r7.w < cb0[0].x);
      r3.w = cmp(r3.w < r5.w);
      r3.w = r3.w ? r8.w : 0;
      r7.w = r7.w * cb0[0].w + 1;
      r4.w = r5.w * r6.w + -r4.w;
      r11.y = r7.w * r4.w;
      r11.x = max(r9.x, r5.w);
      r9.xz = r3.ww ? r11.xy : r9.xy;
      r3.w = r9.x * r9.x + 1;
      r3.w = sqrt(r3.w);
      r3.w = r9.x / r3.w;
      r11.xy = r10.zw;
      r4.w = r9.z;
      r5.w = r9.x;
      r6.w = r3.w;
      r7.w = 1;
      while (true) {
        r8.w = cmp(r0.w < r7.w);
        if (r8.w != 0) break;
        r11.xy = r10.xy * cb2[14].xy + r11.xy;
        r12.z = t1.SampleLevel(s1_s, r11.xy, 0).x;
        r11.zw = r11.xy * v1.xy + v1.zw;
        r12.xy = r12.zz * r11.zw;
        r8.w = -r12.z + r0.z;
        r11.zw = r12.zz * r11.zw + -r0.xy;
        r9.w = dot(r11.zw, r11.zw);
        r9.w = rsqrt(r9.w);
        r8.w = r9.w * r8.w;
        r12.xyz = r12.xyz + -r0.xyz;
        r9.w = dot(r12.xyz, r12.xyz);
        r11.z = cmp(r9.w < cb0[0].x);
        r11.w = cmp(r5.w < r8.w);
        r11.z = r11.w ? r11.z : 0;
        if (r11.z != 0) {
          r11.z = r8.w * r8.w + 1;
          r11.z = sqrt(r11.z);
          r11.z = r8.w / r11.z;
          r9.w = r9.w * cb0[0].w + 1;
          r11.w = r11.z + -r6.w;
          r4.w = r9.w * r11.w + r4.w;
          r5.w = r8.w;
          r6.w = r11.z;
        }
        r7.w = 1 + r7.w;
      }
      r2.y = r4.w * cb0[0].z + r2.y;
      r2.w = 1 + r2.w;
    }
    r1.x = saturate(1 + -r2.y);
    r0.w = sqrt(r1.w);
    r2.xyw = -r3.xyz + r0.xyz;
    r1.w = dot(r2.xyw, r2.xyw);
    r1.w = sqrt(r1.w);
    r0.w = cmp(r0.w < r1.w);
    r2.xyw = r0.www ? r4.xyz : r3.xyz;
    r3.xyz = -r5.xyz + r0.xyz;
    r0.w = dot(r3.xyz, r3.xyz);
    r0.w = sqrt(r0.w);
    r1.w = sqrt(r2.z);
    r0.w = cmp(r0.w < r1.w);
    r3.xyz = r0.www ? r5.xyz : r6.xyz;
    r2.xyz = r2.xyw + -r0.xyz;
    r0.w = dot(r2.xyz, r2.xyz);
    r0.w = sqrt(r0.w);
    r0.xyz = r3.xyz + -r0.xyz;
    r0.x = dot(r0.xyz, r0.xyz);
    r0.x = sqrt(r0.x);
    r0.xw = cmp(r0.xw < cb0[1].xx);
    r0.x = r0.x ? r0.w : 0;
    r1.z = r0.x ? 1.000000 : 0;
    r1.y = r1.x * r1.x;
    r0.xy = r1.yz + r1.yz;
    r0.xy = cmp(r0.xy >= cb0[1].yy);
    o0.xy = r0.xy ? r1.xz : float2(1,0);
  } else {
    o0.xy = float2(1,1);
  }
  return;
}

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Generated by Microsoft (R) D3D Shader Disassembler
//
//   using 3Dmigoto v0.6.181 on Sun Dec 31 12:55:35 2023
//
//
// Input signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_POSITION              0   xyzw        0      POS   float
// TEXCOORD                 0   xyzw        1     NONE   float   xyzw
// TEXCOORD                 1   xyz         2     NONE   float   xyz
// TEXCOORD                 2   xyz         3     NONE   float   xyz
// TEXCOORD                 3   xyzw        4     NONE   float   xyzw
// TEXCOORD                 4   xyzw        5     NONE   float   xyzw
// TEXCOORD                 5   xyzw        6     NONE   float   xyzw
// TEXCOORD                 6   xy          7     NONE   float   xy
//
//
// Output signature:
//
// Name                 Index   Mask Register SysValue  Format   Used
// -------------------- ----- ------ -------- -------- ------- ------
// SV_TARGET                0   xy          0   TARGET   float   xy
//
ps_5_0
dcl_globalFlags refactoringAllowed
dcl_constantbuffer CB0[3], immediateIndexed
dcl_constantbuffer CB2[15], immediateIndexed
dcl_sampler s0, mode_default
dcl_sampler s1, mode_default
dcl_resource_texture2d (float,float,float,float) t0
dcl_resource_texture2d (float,float,float,float) t1
dcl_input_ps linear v1.xyzw
dcl_input_ps linear v2.xyz
dcl_input_ps linear v3.xyz
dcl_input_ps linear v4.xyzw
dcl_input_ps linear v5.xyzw
dcl_input_ps linear v6.xyzw
dcl_input_ps linear v7.xy
dcl_output o0.xy
dcl_temps 13
sample_l_indexable(texture2d)(float,float,float,float) r0.z, v6.xyxx, t1.yzxw, s1, l(0.000000)
div r0.w, cb0[2].x, r0.z
lt r1.x, cb2[14].x, r0.w
if_nz r1.x
  mul r0.xy, r0.zzzz, v7.xyxx
  sample_l_indexable(texture2d)(float,float,float,float) r1.xyz, v6.zwzz, t0.xyzw, s0, l(0.000000)
  mul r0.w, r0.w, cb2[14].z
  min r2.y, r0.w, l(6.000000)
  add r1.w, r2.y, l(1.000000)
  div r2.x, r0.w, r1.w
  div r0.w, l(20.000000), r2.x
  lt r1.w, r0.w, r2.y
  add r0.w, r1.z, r0.w
  round_ni r0.w, r0.w
  max r3.y, r0.w, l(1.000000)
  div r3.x, l(20.000000), r3.y
  movc r2.xy, r1.wwww, r3.xyxx, r2.xyxx
  sample_l_indexable(texture2d)(float,float,float,float) r3.z, v3.xyxx, t1.yzxw, s1, l(0.000000)
  mul r3.xy, r3.zzzz, v4.xyxx
  sample_l_indexable(texture2d)(float,float,float,float) r4.z, v3.zyzz, t1.yzxw, s1, l(0.000000)
  mul r4.xy, r4.zzzz, v5.zwzz
  sample_l_indexable(texture2d)(float,float,float,float) r5.z, v2.xyxx, t1.yzxw, s1, l(0.000000)
  mul r5.xy, r5.zzzz, v4.zwzz
  sample_l_indexable(texture2d)(float,float,float,float) r6.z, v2.xzxx, t1.yzxw, s1, l(0.000000)
  mul r6.xy, r6.zzzz, v5.xyxx
  add r7.xyz, -r0.xyzx, r3.xyzx
  add r8.xyz, r0.xyzx, -r4.xyzx
  dp3 r0.w, r7.xyzx, r7.xyzx
  dp3 r1.w, r8.xyzx, r8.xyzx
  lt r0.w, r0.w, r1.w
  movc r7.xyz, r0.wwww, r7.xyzx, r8.xyzx
  add r8.xyz, -r0.xyzx, r5.xyzx
  add r9.xyz, r0.xyzx, -r6.xyzx
  dp3 r0.w, r8.xyzx, r8.xyzx
  dp3 r2.z, r9.xyzx, r9.xyzx
  lt r0.w, r0.w, r2.z
  movc r8.xyz, r0.wwww, r8.xyzx, r9.xyzx
  mul r8.xyz, r8.xyzx, cb0[1].zzzz
  add r0.w, r2.y, l(-1.000000)
  mov r9.y, l(0)
  mov r2.yw, l(0,0,0,0)
  loop
    ge r3.w, r2.w, l(4.000000)
    breakc_nz r3.w
    mul r3.w, r2.w, l(1.570796)
    sincos r10.x, r11.x, r3.w
    mul r9.zw, r1.yyyx, r10.xxxx
    mad r10.x, r11.x, r1.x, -r9.z
    mad r10.y, r11.x, r1.y, r9.w
    mul r9.zw, r10.xxxy, cb2[14].xxxy
    mul r10.xy, r2.xxxx, r9.zwzz
    mul r10.zw, r1.zzzz, r10.xxxy
    mul r10.xyzw, r10.xyzw, cb2[14].zwzw
    round_ne r10.xyzw, r10.xyzw
    mad r10.zw, r10.zzzw, cb2[14].xxxy, v6.xxxy
    mul r11.xy, r10.xyxx, cb2[14].xyxx
    mul r12.xyz, r8.xyzx, r11.yyyy
    mad r12.xyz, r11.xxxx, r7.xyzx, r12.xyzx
    dp2 r3.w, r12.xyxx, r12.xyxx
    rsq r3.w, r3.w
    mad r9.x, -r12.z, r3.w, cb0[0].y
    mad r9.zw, r1.zzzz, r11.xxxy, r9.zzzw
    mul r9.zw, r9.zzzw, cb2[14].zzzw
    round_ne r9.zw, r9.zzzw
    mul r11.xy, r9.zwzz, cb2[14].xyxx
    mul r11.yzw, r8.xxyz, r11.yyyy
    mad r11.xyz, r11.xxxx, r7.xyzx, r11.yzwy
    dp2 r3.w, r11.xyxx, r11.xyxx
    rsq r3.w, r3.w
    mad r3.w, -r11.z, r3.w, cb0[0].y
    mad r4.w, r3.w, r3.w, l(1.000000)
    rsq r4.w, r4.w
    mul r4.w, r3.w, r4.w
    mad r9.zw, r9.zzzw, cb2[14].xxxy, v6.xxxy
    sample_l_indexable(texture2d)(float,float,float,float) r11.z, r9.zwzz, t1.yzxw, s1, l(0.000000)
    mad r9.zw, r9.zzzw, v1.xxxy, v1.zzzw
    mul r11.xy, r9.zwzz, r11.zzzz
    add r5.w, r0.z, -r11.z
    mad r9.zw, r11.zzzz, r9.zzzw, -r0.xxxy
    dp2 r6.w, r9.zwzz, r9.zwzz
    rsq r6.w, r6.w
    mul r5.w, r5.w, r6.w
    mad r6.w, r5.w, r5.w, l(1.000000)
    rsq r6.w, r6.w
    add r11.xyz, -r0.xyzx, r11.xyzx
    dp3 r7.w, r11.xyzx, r11.xyzx
    lt r8.w, r7.w, cb0[0].x
    lt r3.w, r3.w, r5.w
    and r3.w, r3.w, r8.w
    mad r7.w, r7.w, cb0[0].w, l(1.000000)
    mad r4.w, r5.w, r6.w, -r4.w
    mul r11.y, r4.w, r7.w
    max r11.x, r5.w, r9.x
    movc r9.xz, r3.wwww, r11.xxyx, r9.xxyx
    mad r3.w, r9.x, r9.x, l(1.000000)
    sqrt r3.w, r3.w
    div r3.w, r9.x, r3.w
    mov r11.xy, r10.zwzz
    mov r4.w, r9.z
    mov r5.w, r9.x
    mov r6.w, r3.w
    mov r7.w, l(1.000000)
    loop
      lt r8.w, r0.w, r7.w
      breakc_nz r8.w
      mad r11.xy, r10.xyxx, cb2[14].xyxx, r11.xyxx
      sample_l_indexable(texture2d)(float,float,float,float) r12.z, r11.xyxx, t1.yzxw, s1, l(0.000000)
      mad r11.zw, r11.xxxy, v1.xxxy, v1.zzzw
      mul r12.xy, r11.zwzz, r12.zzzz
      add r8.w, r0.z, -r12.z
      mad r11.zw, r12.zzzz, r11.zzzw, -r0.xxxy
      dp2 r9.w, r11.zwzz, r11.zwzz
      rsq r9.w, r9.w
      mul r8.w, r8.w, r9.w
      add r12.xyz, -r0.xyzx, r12.xyzx
      dp3 r9.w, r12.xyzx, r12.xyzx
      lt r11.z, r9.w, cb0[0].x
      lt r11.w, r5.w, r8.w
      and r11.z, r11.w, r11.z
      if_nz r11.z
        mad r11.z, r8.w, r8.w, l(1.000000)
        sqrt r11.z, r11.z
        div r11.z, r8.w, r11.z
        mad r9.w, r9.w, cb0[0].w, l(1.000000)
        add r11.w, -r6.w, r11.z
        mad r4.w, r9.w, r11.w, r4.w
        mov r5.w, r8.w
        mov r6.w, r11.z
      endif
      add r7.w, r7.w, l(1.000000)
    endloop
    mad r2.y, r4.w, cb0[0].z, r2.y
    add r2.w, r2.w, l(1.000000)
  endloop
  add_sat r1.x, -r2.y, l(1.000000)
  sqrt r0.w, r1.w
  add r2.xyw, r0.xyxz, -r3.xyxz
  dp3 r1.w, r2.xywx, r2.xywx
  sqrt r1.w, r1.w
  lt r0.w, r0.w, r1.w
  movc r2.xyw, r0.wwww, r4.xyxz, r3.xyxz
  add r3.xyz, r0.xyzx, -r5.xyzx
  dp3 r0.w, r3.xyzx, r3.xyzx
  sqrt r0.w, r0.w
  sqrt r1.w, r2.z
  lt r0.w, r0.w, r1.w
  movc r3.xyz, r0.wwww, r5.xyzx, r6.xyzx
  add r2.xyz, -r0.xyzx, r2.xywx
  dp3 r0.w, r2.xyzx, r2.xyzx
  sqrt r0.w, r0.w
  add r0.xyz, -r0.xyzx, r3.xyzx
  dp3 r0.x, r0.xyzx, r0.xyzx
  sqrt r0.x, r0.x
  lt r0.xw, r0.xxxw, cb0[1].xxxx
  and r0.x, r0.x, r0.w
  and r1.z, r0.x, l(0x3f800000)
  mul r1.y, r1.x, r1.x
  add r0.xy, r1.yzyy, r1.yzyy
  ge r0.xy, r0.xyxx, cb0[1].yyyy
  movc o0.xy, r0.xyxx, r1.xzxx, l(1.000000,0,0,0)
else
  mov o0.xy, l(1.000000,1.000000,0,0)
endif
ret
// Approximately 0 instruction slots used

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