uniform sampler2D tex;
uniform float zn;
uniform float zf;

layout (std140) uniform MatrixesData
{
    mat4 ViewMatrix;
    mat4 ProjectionMatrix;
    mat4 InverseViewMatrix;
    mat4 InverseProjectionMatrix;
    mat4 ShadowViewProjMatrixes[4];
    vec2 screen;
};

out float Depth;

void main()
{
    vec2 uv = gl_FragCoord.xy / screen;
    float d = texture(tex, uv).x;
    float c0 = zn * zf, c1 = zn - zf, c2 = zf;
    Depth = c0 / (d * c1 + c2);
}