#include <metal_stdlib>
#pragma clang diagnostic ignored "-Wparentheses-equality"
using namespace metal;
struct xlatMtlShaderInput {
  float2 xlv_TEXCOORD0;
};
struct xlatMtlShaderOutput {
  half4 _glesFragData_0 [[color(0)]];
  half4 _glesFragData_1 [[color(1)]];
};
struct xlatMtlShaderUniform {
  float4 _ZBufferParams;
  float4 _LightPos;
  float4x4 _FrustumRays;
  float4 _CameraPosLocal;
  float4 _CoordTexDim;
  float4 _ScreenTexDim;
};
fragment xlatMtlShaderOutput xlatMtlMain (xlatMtlShaderInput _mtl_i [[stage_in]], constant xlatMtlShaderUniform& _mtl_u [[buffer(0)]]
  ,   texture2d<half> _CameraDepthTexture [[texture(0)]], sampler _mtlsmp__CameraDepthTexture [[sampler(0)]])
{
  xlatMtlShaderOutput _mtl_o;
  float4 depth_1;
  float2 coordTemp_2;
  float sampleOnEpipolarLine_3;
  float tmpvar_4;
  tmpvar_4 = clamp ((_mtl_i.xlv_TEXCOORD0.y - (0.5 / _mtl_u._CoordTexDim.y)), 0.0, 1.0);
  sampleOnEpipolarLine_3 = ((_mtl_i.xlv_TEXCOORD0.x - (0.5 / _mtl_u._CoordTexDim.x)) * (_mtl_u._CoordTexDim.x / (_mtl_u._CoordTexDim.x - 1.0)));
  float tmpvar_5;
  tmpvar_5 = clamp (sampleOnEpipolarLine_3, 0.0, 1.0);
  sampleOnEpipolarLine_3 = tmpvar_5;
  int tmpvar_6;
  tmpvar_6 = int(clamp (floor(
    (tmpvar_4 * 4.0)
  ), 0.0, 3.0));
  float tmpvar_7;
  tmpvar_7 = (-1.0 + (2.0 * fract(
    (tmpvar_4 * 4.0)
  )));
  float4 tmpvar_8;
  tmpvar_8.xz = float2(-1.0, 1.0);
  tmpvar_8.y = tmpvar_7;
  tmpvar_8.w = -(tmpvar_7);
  float4 tmpvar_9;
  tmpvar_9.yw = float2(-1.0, 1.0);
  tmpvar_9.x = -(tmpvar_7);
  tmpvar_9.z = tmpvar_7;
  bool4 tmpvar_10;
  tmpvar_10 = bool4((int4(tmpvar_6) == int4(0, 1, 2, 3)));
  half4 tmpvar_11;
  tmpvar_11 = half4(tmpvar_10);
  half4 tmpvar_12;
  tmpvar_12 = half4(tmpvar_10);
  float2 tmpvar_13;
  tmpvar_13.x = dot (tmpvar_9, (float4)tmpvar_11);
  tmpvar_13.y = dot (tmpvar_8, (float4)tmpvar_12);
  coordTemp_2 = ((mix (_mtl_u._LightPos.xy, 
    -(tmpvar_13)
  , float2(tmpvar_5)) * 0.5) + 0.5);
  float4 tmpvar_14;
  tmpvar_14.zw = float2(0.0, 0.0);
  tmpvar_14.xy = coordTemp_2;
  coordTemp_2 = ((floor(
    (coordTemp_2 * _mtl_u._ScreenTexDim.xy)
  ) + 0.5) * _mtl_u._ScreenTexDim.zw);
  half4 tmpvar_15;
  tmpvar_15 = _CameraDepthTexture.sample(_mtlsmp__CameraDepthTexture, (float2)(coordTemp_2));
  float tmpvar_16;
  float z_17;
  z_17 = float(tmpvar_15.x);
  tmpvar_16 = (1.0/(((_mtl_u._ZBufferParams.x * z_17) + _mtl_u._ZBufferParams.y)));
  depth_1 = float4(tmpvar_16);
  float4 v_18;
  v_18.x = _mtl_u._FrustumRays[0].x;
  v_18.y = _mtl_u._FrustumRays[1].x;
  v_18.z = _mtl_u._FrustumRays[2].x;
  v_18.w = _mtl_u._FrustumRays[3].x;
  float4 v_19;
  v_19.x = _mtl_u._FrustumRays[0].y;
  v_19.y = _mtl_u._FrustumRays[1].y;
  v_19.z = _mtl_u._FrustumRays[2].y;
  v_19.w = _mtl_u._FrustumRays[3].y;
  float4 v_20;
  v_20.x = _mtl_u._FrustumRays[0].w;
  v_20.y = _mtl_u._FrustumRays[1].w;
  v_20.z = _mtl_u._FrustumRays[2].w;
  v_20.w = _mtl_u._FrustumRays[3].w;
  float4 v_21;
  v_21.x = _mtl_u._FrustumRays[0].z;
  v_21.y = _mtl_u._FrustumRays[1].z;
  v_21.z = _mtl_u._FrustumRays[2].z;
  v_21.w = _mtl_u._FrustumRays[3].z;
  float3 tmpvar_22;
  tmpvar_22 = mix (mix (v_18.xyz, v_19.xyz, tmpvar_14.xxx), mix (v_20.xyz, v_21.xyz, tmpvar_14.xxx), tmpvar_14.yyy);
  float tmpvar_23;
  tmpvar_23 = sqrt(dot (tmpvar_22, tmpvar_22));
  bool tmpvar_24;
  float3 tmpvar_25;
  tmpvar_25 = (1.0/((tmpvar_22 / tmpvar_23)));
  float3 tmpvar_26;
  tmpvar_26 = (tmpvar_25 * (-0.5 - _mtl_u._CameraPosLocal.xyz));
  float3 tmpvar_27;
  tmpvar_27 = (tmpvar_25 * (0.5 - _mtl_u._CameraPosLocal.xyz));
  float3 tmpvar_28;
  tmpvar_28 = min (tmpvar_27, tmpvar_26);
  float3 tmpvar_29;
  tmpvar_29 = max (tmpvar_27, tmpvar_26);
  float2 tmpvar_30;
  tmpvar_30 = max (tmpvar_28.xx, tmpvar_28.yz);
  float tmpvar_31;
  tmpvar_31 = max (tmpvar_30.x, tmpvar_30.y);
  float2 tmpvar_32;
  tmpvar_32 = min (tmpvar_29.xx, tmpvar_29.yz);
  float tmpvar_33;
  tmpvar_33 = min (tmpvar_32.x, tmpvar_32.y);
  tmpvar_24 = bool(((tmpvar_31 < tmpvar_33) && (tmpvar_33 > 0.0)));
  if (((bool)!(tmpvar_24) || (tmpvar_16 < (tmpvar_31 / tmpvar_23)))) {
    depth_1 = -(float4(tmpvar_16));
  } else {
    depth_1 = min (depth_1, float4((tmpvar_33 / tmpvar_23)));
  };
  _mtl_o._glesFragData_0 = half4(tmpvar_14);
  _mtl_o._glesFragData_1 = half4(depth_1);
  return _mtl_o;
}


// stats: 65 alu 1 tex 1 flow
// inputs: 1
//  #0: xlv_TEXCOORD0 (high float) 2x1 [-1]
// uniforms: 6 (total size: 144)
//  #0: _ZBufferParams (high float) 4x1 [-1] loc 0
//  #1: _LightPos (high float) 4x1 [-1] loc 16
//  #2: _FrustumRays (high float) 4x4 [-1] loc 32
//  #3: _CameraPosLocal (high float) 4x1 [-1] loc 96
//  #4: _CoordTexDim (high float) 4x1 [-1] loc 112
//  #5: _ScreenTexDim (high float) 4x1 [-1] loc 128
// textures: 1
//  #0: _CameraDepthTexture (low 2d) 0x0 [-1] loc 0
