#version 300 es

#define gl_Vertex _glesVertex
in vec4 _glesVertex;
#define gl_MultiTexCoord0 _glesMultiTexCoord0
in vec4 _glesMultiTexCoord0;
float xll_saturate_f( float x) {
  return clamp( x, 0.0, 1.0);
}
struct VertexOutputShadowCaster {
    highp vec4 pos;
    mediump vec2 tex;
};
struct VertexInput {
    highp vec4 vertex;
    mediump vec4 uv0;
};
uniform highp vec4 unity_LightShadowBias;
uniform highp mat4 glstate_matrix_mvp;
VertexOutputShadowCaster vertShadowCaster( in VertexInput v ) {
    VertexOutputShadowCaster o;
    o.pos = (glstate_matrix_mvp * v.vertex);
    o.pos.z += xll_saturate_f((unity_LightShadowBias.x / o.pos.w));
    highp float clamped = max( o.pos.z, (o.pos.w * -1.0));
    o.pos.z = mix( o.pos.z, clamped, unity_LightShadowBias.y);
    o.tex.xy = v.uv0.xy;
    return o;
}
out mediump vec2 xlv_TEXCOORD1;
void main() {
    VertexOutputShadowCaster xl_retval;
    VertexInput xlt_v;
    xlt_v.vertex = vec4(gl_Vertex);
    xlt_v.uv0 = vec4(gl_MultiTexCoord0);
    xl_retval = vertShadowCaster( xlt_v);
    gl_Position = vec4(xl_retval.pos);

    // Was producing missing precision cast on Metal, _bl_o.xlv_TEXCOORD1 = _bl_i._glesMultiTexCoord0.xy
    xlv_TEXCOORD1 = vec2(xl_retval.tex);
}
