uniform float4 screen_res;
uniform Texture2D s_occ;

float ssao_blur_ps(float2 centerTC)
{
    // low weight center sample - will be used on edges
    float fSumWeight = 0.025f;
    float2 centerData = s_occ.Sample(smp_nofilter, centerTC);
    float fOcclusion = centerData.r * fSumWeight;
    float centerDepth = centerData.g;

    float2 arrOffsets[4] =
    {
        float2(1, -1),
        float2(-1, -1),
        float2(1, 1),
        float2(-1, 1)
    };

    [unroll]
    for (int i = 0; i < 4; i++)
    {
        float2 sampleTC = centerTC + pos_decompression_params2.zw * arrOffsets[i];
        float2 sampleData = s_occ.Sample(smp_nofilter, sampleTC);
        float fDepth = sampleData.g;
        float fDiff = 8 * abs(fDepth - centerDepth) / min(fDepth, centerDepth);
        float fWeight = saturate(1 - fDiff);

        fOcclusion += sampleData.r * fWeight;

        fSumWeight += fWeight;
    }

    fOcclusion /= fSumWeight;

    return fOcclusion;
}
