// CRC32: 4CF4A2F4 | Unity headers extracted from SESSAO.shader
// Shader "Hidden/SESSAO" {
//   Properties {
//    _MainTex ("Base (RGB)", 2D) = "white" { }
//   }
//   Fallback Off
//   SubShader 1/1 {
//     Pass 1/7 {
//       ZTest False
//       ZWrite Off
//       Cull Off
//       Fog { Mode Off }
//       GpuProgramID 31003
//       Program "fp" {
//         SubProgram "d3d9 " {
//           Matrix 0 [ProjectionMatrixInverse]
//           Float 7 [Bias]
//           Float 13 [Downsamp]
//           Float 11 [DrawDistance]
//           Float 12 [DrawDistanceFadeSize]
//           Float 14 [HalfSampling]
//           Float 9 [Intensity]
//           Float 16 [Orthographic]
//           Float 15 [PreserveDetails]
//           Float 6 [Radius]
//           Float 10 [SampleDistributionCurve]
//           Float 8 [ZThickness]
//           Vector 5 [_MainTex_TexelSize]
//           Vector 4 [_ScreenParams]
//           SetTexture 0 [_CameraDepthNormalsTexture] 2D 0
//           SetTexture 1 [_CameraDepthTexture] 2D 1
//           SetTexture 2 [_DitherTexture] 2D 2
//           SetTexture 3 [_ColorDownsampled] 2D 3
//         }
//       }
//     }
//   }
// }
// 
// Headers extracted with DarkStarSword's extract_unity_shaders.py
// https://raw.githubusercontent.com/DarkStarSword/3d-fixes/master/extract_unity_shaders.py

    ps_3_0
    def c17, 3.55539989, 0, -1.77769995, 1
    def c18, 5, 4, 8, 9.99999975e-005
    def c19, 10, 6, 25.5, 0
    def c20, 6.28318548, 0.159154937, 0.5, -3.14159274
    def c21, 0.00100000005, -0.800000012, -0.00999999978, 0
    def c22, 1, 0, 2, -1
    def c23, 1.20000005, 1, 0, 0
    defi i0, 255, 0, 0, 0
    dcl_texcoord v0.xy
    dcl_2d s0
    dcl_2d s1
    dcl_2d s2
    dcl_2d s3

def c220, 0, 1, 0.0625, 0.5
dcl_2d s15

texldl r31, c220.z, s15

    mul r0, c22.xxyy, v0.xyxx
    texldl r0, r0, s1
    mad r0.z, r0.x, c22.z, c22.w
    mad r0.xyw, v0.xyzx, c22.zzzy, c22.wwzx

// SSAO normal map artefact fix:
add r31.w, r0.w, -r31.y
mad r0.x, -r31.w, r31.x, r0.x

    dp4 r1.x, c0, r0
    dp4 r1.y, c1, r0
    dp4 r1.z, c2, r0
    dp4 r0.x, c3, r0
    rcp r0.x, r0.x
    mul r2, r0.x, r1.xyzz
    if_lt r2.w, -c11.x
      mov oC0, c22.x
    else
      texld r3, v0, s0
      mad r0.yzw, r3.xxyz, c17.xxxy, c17.xzzw
      dp3 r0.w, r0.yzww, r0.yzww
      rcp r0.w, r0.w
      add r1.x, r0.w, r0.w
      mul r3.xy, r0.yzzw, r1.x
      mad r3.z, r0.w, c22.z, c22.w
      mul r0.yz, c5.xzww, v0.xxyw
      add r0.w, c15.x, c15.x
      add r1.x, -r0.w, c18.x
      mad r1.x, c13.x, r1.x, r1.x
      rcp r1.x, r1.x
      mul r4.xy, r0.yzzw, r1.x
      mov r4.zw, c22.y
      texldl r4, r4, s2
      mov r0.yz, c18
      mad r0.y, c15.x, r0.y, r0.z
      add r0.z, r0.w, c18.y
      mad r0.y, c14.x, -r0.z, r0.y
      mad r0.x, r1.z, -r0.x, c18.w
      add r0.z, -r0.x, c19.x
      mad r0.x, c16.x, r0.z, r0.x
      rcp r0.x, r0.x
      mul r0.x, r0.x, c6.x
      rcp r0.z, r0.y
      mul r0.w, r4.w, c19.y
      rcp r1.x, c4.y
      mul r1.x, r1.x, c4.x
      pow r1.y, r4.w, c10.x
      mul r1.z, r4_abs.w, c8.x
      mul r1.z, r0.x, r1.z
      mul r1.z, r1.z, c19.z
      rcp r1.z, r1.z
      mov r4.x, c22.x
      add r1.w, -r4.w, c22.z
      mov r5.zw, c22.y
      mov r6.w, c22.x
      mov r7.zw, c22.y
      mov r8, c22.y
      mov r3.w, c22.y
      mov r4.y, c22.y
      rep i0
        mov r4.z, r0.y
        break_ge r4.y, r4.z
        mul r4.z, r0.z, r4.y
        mad r4.z, r4.z, c20.x, r0.w
        mad r4.z, r4.z, c20.y, c20.z
        frc r4.z, r4.z
        mad r4.z, r4.z, c20.x, c20.w
        sincos r9.xy, r4.z
        mul r10.y, r1.x, r9.x
        mov r10.x, r9.y
        mul r4.zw, r1.y, r10.xyxy
        mul r9.xy, r9.yxzw, c21.x
        mad r4.zw, r4, r0.x, r9.xyxy
        add r7.xy, r4.zwzw, v0
        mov_sat r5.xy, r7
        texldl r9, r5, s1
        mad r6.xy, r5, c22.z, c22.w
        mad r6.z, r9.x, c22.z, c22.w

// SSAO normal map artefact fix:
add r31.w, r6.w, -r31.y
mad r6.x, -r31.w, r31.x, r6.x

        dp4 r9.x, c0, r6
        dp4 r9.y, c1, r6
        dp4 r9.z, c2, r6
        dp4 r4.z, c3, r6
        rcp r4.z, r4.z
        mad r9, r9.xyzz, r4.z, -r2
        nrm r6.xyz, r9
        dp3 r4.z, r6, r3
        add r4.w, r9_abs.w, c21.y
        max r5.x, r4.w, c22.y
        mad_sat r4.w, r5.x, -r1.z, c22.x
        add r3.w, r3.w, r4.w
        texldl r9, r7, s3
        add r5.x, -r4.z, c7.x
        lrp_sat r5.y, r4.z, r4.x, -c7.x
        mul r4.z, r4.w, r5.y
        mad r10.x, r4.z, r1.w, r8.x
        mul r6.xyz, r4.w, r9
        mul r6.xyz, r5.y, r6
        cmp r6.xyz, r9, r6, c22.y
        add r10.yzw, r6.xxyz, r8
        cmp r8, r5.x, r8, r10
        add r4.y, r4.y, c22.x
      endrep
      add r0.x, r3.w, c21.z
      rcp r0.y, r3.w
      cmp r0.x, r0.x, r0.y, c22.x
      mul r0.y, r0.x, r8.x
      mad_sat r0.y, r0.y, -c23.x, c23.y
      pow r1.x, r0.y, c9.x
      rcp r0.y, c12.x
      mul r0.z, r0.y, r2.w
      mad_sat r0.y, c11.x, r0.y, r0.z
      add r0.z, r1.x, c22.w
      mad oC0.w, r0.y, r0.z, c22.x
      mad r0.xyz, r8.yzww, r0.x, c18.w
      dp3 r0.w, r0, r0
      rsq r0.w, r0.w
      mul oC0.xyz, r0.w, r0
    endif
