((function clamp
   (signature float
     (parameters
       (declare (in) float arg0)
       (declare (in) float arg1)
       (declare (in) float arg2))
     ((return (expression float max (expression float min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature vec2
     (parameters
       (declare (in) vec2 arg0)
       (declare (in) vec2 arg1)
       (declare (in) vec2 arg2))
     ((return (expression vec2 max (expression vec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature vec3
     (parameters
       (declare (in) vec3 arg0)
       (declare (in) vec3 arg1)
       (declare (in) vec3 arg2))
     ((return (expression vec3 max (expression vec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature vec4
     (parameters
       (declare (in) vec4 arg0)
       (declare (in) vec4 arg1)
       (declare (in) vec4 arg2))
     ((return (expression vec4 max (expression vec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature vec2
     (parameters
       (declare (in) vec2  arg0)
       (declare (in) float arg1)
       (declare (in) float arg2))
     ((return (expression vec2 max (expression vec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature vec3
     (parameters
       (declare (in) vec3  arg0)
       (declare (in) float arg1)
       (declare (in) float arg2))
     ((return (expression vec3 max (expression vec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature vec4
     (parameters
       (declare (in) vec4  arg0)
       (declare (in) float arg1)
       (declare (in) float arg2))
     ((return (expression vec4 max (expression vec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature int
     (parameters
       (declare (in) int arg0)
       (declare (in) int arg1)
       (declare (in) int arg2))
     ((return (expression int max (expression int min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature ivec2
     (parameters
       (declare (in) ivec2 arg0)
       (declare (in) ivec2 arg1)
       (declare (in) ivec2 arg2))
     ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature ivec3
     (parameters
       (declare (in) ivec3 arg0)
       (declare (in) ivec3 arg1)
       (declare (in) ivec3 arg2))
     ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature ivec4
     (parameters
       (declare (in) ivec4 arg0)
       (declare (in) ivec4 arg1)
       (declare (in) ivec4 arg2))
     ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature ivec2
     (parameters
       (declare (in) ivec2 arg0)
       (declare (in) int arg1)
       (declare (in) int arg2))
     ((return (expression ivec2 max (expression ivec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature ivec3
     (parameters
       (declare (in) ivec3 arg0)
       (declare (in) int arg1)
       (declare (in) int arg2))
     ((return (expression ivec3 max (expression ivec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature ivec4
     (parameters
       (declare (in) ivec4 arg0)
       (declare (in) int arg1)
       (declare (in) int arg2))
     ((return (expression ivec4 max (expression ivec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature uint
     (parameters
       (declare (in) uint arg0)
       (declare (in) uint arg1)
       (declare (in) uint arg2))
     ((return (expression uint max (expression uint min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature uvec2
     (parameters
       (declare (in) uvec2 arg0)
       (declare (in) uvec2 arg1)
       (declare (in) uvec2 arg2))
     ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature uvec3
     (parameters
       (declare (in) uvec3 arg0)
       (declare (in) uvec3 arg1)
       (declare (in) uvec3 arg2))
     ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature uvec4
     (parameters
       (declare (in) uvec4 arg0)
       (declare (in) uvec4 arg1)
       (declare (in) uvec4 arg2))
     ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature uvec2
     (parameters
       (declare (in) uvec2 arg0)
       (declare (in) uint arg1)
       (declare (in) uint arg2))
     ((return (expression uvec2 max (expression uvec2 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature uvec3
     (parameters
       (declare (in) uvec3 arg0)
       (declare (in) uint arg1)
       (declare (in) uint arg2))
     ((return (expression uvec3 max (expression uvec3 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))

   (signature uvec4
     (parameters
       (declare (in) uvec4 arg0)
       (declare (in) uint arg1)
       (declare (in) uint arg2))
     ((return (expression uvec4 max (expression uvec4 min (var_ref arg0) (var_ref arg2)) (var_ref arg1)))))
))
