//
// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111
//
// Parameters:
//
//   float4x4 View;
//   float cameraFar;
//   float cameraFarMinusNear;
//   float cameraNearFar;
//   sampler2D g_GBufferDepth;
//   sampler2D g_GBufferNormal;
//   float g_RenderRatio;
//   float4 g_SSAOSettings;
//   float4 g_screenXYProjFactor;
//
//
// Registers:
//
//   Name                 Reg   Size
//   -------------------- ----- ----
//   View                 c0       3
//   cameraFar            c3       1
//   cameraNearFar        c4       1
//   cameraFarMinusNear   c5       1
//   g_RenderRatio        c6       1
//   g_screenXYProjFactor c7       1
//   g_SSAOSettings       c8       1
//   g_GBufferDepth       s0       1
//   g_GBufferNormal      s1       1
//

    ps_3_0
    def c9, 2, -1, 0, 1
    def c10, 0.125, 0, 0, 0
    dcl_texcoord_pp v0.xy  // IN<4,5>
    dcl_texcoord1 v1  // IN<6,7,8,9>
    dcl_texcoord2 v2  // IN<10,11,12,13>
    dcl_texcoord3 v3  // IN<14,15,16,17>
    dcl_texcoord4 v4  // IN<18,19,20,21>
    dcl_2d s0
    dcl_2d s1

#line 481 "pp_final.cgfx"
    mul r0, c6.x, v3.zwxy

#line 478
    texld r1, r0, s0  // getDepth::depthSample<0>

#line 481
    texld r0, r0.zwzw, s0  // getDepth::depthSample<0>

#line 239 "incCommon.cgfx"
    mov r1.w, r0.x

#line 480 "pp_final.cgfx"
    mul r0, c6.x, v1
    texld r2, r0, s0  // getDepth::depthSample<0>
    texld r0, r0.zwzw, s0  // getDepth::depthSample<0>

#line 239 "incCommon.cgfx"
    mov r1.z, r0.x
    mov r1.y, r2.x
    mov r0.x, c5.x  // ::cameraFarMinusNear<0>
    mad r1, r1, r0.x, -c3.x
    rcp r2.x, r1.x
    rcp r2.y, r1.y
    rcp r2.z, r1.z
    rcp r2.w, r1.w
    mul r1, r2.xywz, c4.x  // ::viewSpaceZ<0,1,3,2>

#line 511 "pp_final.cgfx"
    mov r2.z, r1.y

#line 494
    mad r3, v1, c9.x, c9.y

#line 461
    mov r0.yzw, c9
    mad r4, c7.yyxx, r0.zwwz, r0.wzzy

#line 494
    mul r3, r3, r4.xyxy  // ::screenXY1<0>, ::screenXY2<0>

#line 500
    mul r3, r4.zwzw, r3
    mul r2.xy, -r1.y, r3  // getPosition4SSAO::viewPos1<0,1>
    mul r3.xy, -r1.w, r3.zwzw  // getPosition4SSAO::viewPos2<0,1>

#line 526
    mul r0.yz, c6.x, v0.xxyw

#line 452
    texld r5, r0.yzzw, s0  // getDepth::depthSample<0>

#line 526
    texld_pp r6, r0.yzzw, s1  // ::n<0,1,2,3>

#line 233 "incCommon.cgfx"
    mad r0.y, r5.x, r0.x, -c3.x
    rcp r0.y, r0.y
    mul r5.z, r0.y, c4.x  // ::viewSpaceZ<0>

#line 458 "pp_final.cgfx"
    mad r0.yz, v0.xxyw, c9.x, c9.y
    mul r0.yz, r4.xxyw, r0  // ::screenXY<0>

#line 461
    mul r0.yz, r4.xzww, r0
    mul r5.xy, -r5.z, r0.yzzw  // ::viewPos<0,1>

#line 511
    add_pp r2.xyz, r2, -r5  // ::diff<0,1,2>
    dp3_pp r0.y, r2, r2
    rsq r0.z, r0.y
    mad_pp r0.y, r0.y, c8.x, r0.w
    rcp_pp r0.y, r0.y
    mul_pp r2.xyz, r0.z, r2  // ::v<0,1,2>

#line 531
    mad_pp r6.xyz, r6, c9.x, c9.y
    nrm_pp r7.xyz, r6  // ::worldNorm<0,1,2>

#line 534
    mul r6.xyz, r7.y, c1
    mad r6.xyz, c0, r7.x, r6
    mad_pp r6.xyz, c2, r7.z, r6  // ::viewNorm<0,1,2>

#line 515
    dp3_pp r0.z, r6, r2
    add_pp r0.z, r0.z, -c8.y
    max_pp r2.x, r0.z, c9.z
    mul_pp r0.y, r0.y, r2.x
    mul_pp r0.y, r0.y, c8.z  // ::doAmbientOcclusion<0>

#line 511
    mov r2.z, r1.x

#line 495
    mad r7, v3.zwxy, c9.x, c9.y
    mul r7, r4.xyxy, r7  // ::screenXY0<0>, ::screenXY3<0>

#line 501
    mul r7, r4.zwzw, r7

#line 498
    mul r2.xy, -r1.x, r7  // getPosition4SSAO::viewPos0<0,1>

#line 501
    mul r1.xy, -r1.z, r7.zwzw  // getPosition4SSAO::viewPos3<0,1>

#line 511
    add_pp r2.xyz, -r5, r2  // ::diff<0,1,2>
    dp3_pp r0.z, r2, r2
    mad_pp r2.w, r0.z, c8.x, r0.w
    rsq r0.z, r0.z
    mul_pp r2.xyz, r0.z, r2  // ::v<0,1,2>
    dp3_pp r0.z, r6, r2
    add_pp r0.z, r0.z, -c8.y
    max_pp r2.x, r0.z, c9.z
    rcp_pp r0.z, r2.w
    mul_pp r0.z, r0.z, r2.x

#line 562
    mad_pp r0.y, r0.z, c8.z, r0.y  // ::ao<0>

#line 511
    mov r3.z, r1.w
    add_pp r1.xyz, -r5, r1  // ::diff<0,1,2>
    add_pp r2.xyz, r3, -r5  // ::diff<0,1,2>
    dp3_pp r0.z, r2, r2
    mad_pp r1.w, r0.z, c8.x, r0.w
    rsq r0.z, r0.z
    mul_pp r2.xyz, r0.z, r2  // ::v<0,1,2>
    dp3_pp r0.z, r6, r2
    add_pp r0.z, r0.z, -c8.y
    max_pp r2.x, r0.z, c9.z
    rcp_pp r0.z, r1.w
    mul_pp r0.z, r0.z, r2.x

#line 562
    mad_pp r0.y, r0.z, c8.z, r0.y  // ::ao<0>

#line 513
    dp3_pp r0.z, r1, r1
    rsq r1.w, r0.z
    mad_pp r0.z, r0.z, c8.x, r0.w
    rcp_pp r0.z, r0.z
    mul_pp r1.xyz, r1.w, r1  // ::v<0,1,2>
    dp3_pp r1.x, r6, r1
    add_pp r1.x, r1.x, -c8.y
    max_pp r2.x, r1.x, c9.z
    mul_pp r0.z, r0.z, r2.x

#line 562
    mad_pp r0.y, r0.z, c8.z, r0.y  // ::ao<0>

#line 495
    mad r1, v4.zwxy, c9.x, c9.y
    mul r1, r4.xyxy, r1  // ::screenXY0<0>, ::screenXY3<0>

#line 501
    mul r1, r4.zwzw, r1

#line 481
    mul r2, c6.x, v4.zwxy

#line 478
    texld r3, r2, s0  // getDepth::depthSample<0>

#line 481
    texld r2, r2.zwzw, s0  // getDepth::depthSample<0>

#line 239 "incCommon.cgfx"
    mov r3.w, r2.x

#line 480 "pp_final.cgfx"
    mul r2, c6.x, v2
    texld r7, r2, s0  // getDepth::depthSample<0>
    texld r2, r2.zwzw, s0  // getDepth::depthSample<0>

#line 239 "incCommon.cgfx"
    mov r3.z, r2.x
    mov r3.y, r7.x
    mad r2, r3, r0.x, -c3.x
    rcp r3.x, r2.x
    rcp r3.y, r2.y
    rcp r3.z, r2.z
    rcp r3.w, r2.w
    mul r2, r3, c4.x  // ::viewSpaceZ<0,1,2,3>

#line 498 "pp_final.cgfx"
    mul r3.xy, r1, -r2.x  // getPosition4SSAO::viewPos0<0,1>

#line 501
    mul r1.xy, r1.zwzw, -r2.w  // getPosition4SSAO::viewPos3<0,1>

#line 511
    mov r3.z, r2.x
    add_pp r3.xyz, -r5, r3  // ::diff<0,1,2>
    dp3_pp r0.x, r3, r3
    rsq r0.z, r0.x
    mad_pp r0.x, r0.x, c8.x, r0.w
    rcp_pp r0.x, r0.x
    mul_pp r3.xyz, r0.z, r3  // ::v<0,1,2>
    dp3_pp r0.z, r6, r3
    add_pp r0.z, r0.z, -c8.y
    max_pp r1.w, r0.z, c9.z
    mul_pp r0.x, r0.x, r1.w

#line 577
    mad_pp r0.x, r0.x, c8.z, r0.y  // ::ao<0>

#line 494
    mad r3, v2, c9.x, c9.y
    mul r3, r4.xyxy, r3  // ::screenXY1<0>, ::screenXY2<0>

#line 500
    mul r3, r4.zwzw, r3
    mul r4.xy, -r2.y, r3  // getPosition4SSAO::viewPos1<0,1>
    mul r3.xy, -r2.z, r3.zwzw  // getPosition4SSAO::viewPos2<0,1>

#line 511
    mov r4.z, r2.y
    add_pp r4.xyz, -r5, r4  // ::diff<0,1,2>
    dp3_pp r0.y, r4, r4
    rsq r0.z, r0.y
    mad_pp r0.y, r0.y, c8.x, r0.w
    rcp_pp r0.y, r0.y
    mul_pp r4.xyz, r0.z, r4  // ::v<0,1,2>
    dp3_pp r0.z, r6, r4
    add_pp r0.z, r0.z, -c8.y
    max_pp r1.w, r0.z, c9.z
    mul_pp r0.y, r0.y, r1.w

#line 577
    mad_pp r0.x, r0.y, c8.z, r0.x  // ::ao<0>

#line 511
    mov r3.z, r2.z
    mov r1.z, r2.w
    add_pp r1.xyz, -r5, r1  // ::diff<0,1,2>
    add_pp r2.xyz, -r5, r3  // ::diff<0,1,2>
    dp3_pp r0.y, r2, r2
    rsq r0.z, r0.y
    mad_pp r0.y, r0.y, c8.x, r0.w
    rcp_pp r0.y, r0.y
    mul_pp r2.xyz, r0.z, r2  // ::v<0,1,2>
    dp3_pp r0.z, r6, r2
    add_pp r0.z, r0.z, -c8.y
    max_pp r1.w, r0.z, c9.z
    mul_pp r0.y, r0.y, r1.w

#line 577
    mad_pp r0.x, r0.y, c8.z, r0.x  // ::ao<0>

#line 513
    dp3_pp r0.y, r1, r1
    rsq r0.z, r0.y
    mad_pp r0.y, r0.y, c8.x, r0.w
    rcp_pp r0.y, r0.y
    mul_pp r1.xyz, r0.z, r1  // ::v<0,1,2>
    dp3_pp r0.z, r6, r1
    add_pp r0.z, r0.z, -c8.y
    max_pp r1.x, r0.z, c9.z
    mul_pp r0.y, r0.y, r1.x

#line 577
    mad_pp r0.x, r0.y, c8.z, r0.x  // ::ao<0>

#line 580
    mul_sat r0.x, r0.x, c10.x
    add_pp r0.x, -r0.x, r6.w

#line 651
    add_pp oC0.xyz, r0.x, c9.w  // ::mainFPSSAO<0,1,2>
    mov_pp oC0.w, c9.w  // ::mainFPSSAO<3>

// approximately 169 instruction slots used (10 texture, 159 arithmetic)
 