// Expect 12 errors

uniform shader      s;
uniform colorFilter f;
uniform blender     b;

uniform float2 xy;
uniform half4  color;

half4 eval_shader_xy_color() { return s.eval(xy, color); }
half4 eval_shader_color()    { return s.eval(color); }
half4 eval_shader_color_xy() { return s.eval(color, xy); }
half4 eval_shader_empty()    { return s.eval(); }
half4 eval_shader_matrix()   { return s.eval(float3x3(1)); }

half4 eval_colorFilter_empty()    { return f.eval(); }
half4 eval_colorFilter_xy()       { return f.eval(xy); }
half4 eval_colorFilter_xy_color() { return f.eval(xy, color); }

half4 eval_blender_empty()    { return b.eval(); }
half4 eval_blender_color()    { return b.eval(color); }
half4 eval_blender_xy()       { return b.eval(xy); }
half4 eval_blender_xy_color() { return b.eval(xy, color); }

// Correct usage (EXPECT NO ERRORS)

half4 eval_blender() { return b.eval(color, color); }
half4 eval_colorFilter() { return f.eval(color); }
half4 eval_shader() { return s.eval(xy); }
