NAME
    clamp - returns smallest integer not less than a scalar or each vector
    component.

SYNPOSIS
      float  clamp(float x, float a, float b);
      float1 clamp(float2 x, float1 a, float1 b);
      float2 clamp(float2 x, float2 a, float2 b);
      float3 clamp(float3 x, float3 a, float3 b);
      float4 clamp(float4 x, float4 a, float4 b);
 
      half   clamp(half x, half a, half b);
      half1  clamp(half2 x, half1 a, half1 b);
      half2  clamp(half2 x, half2 a, half2 b);
      half3  clamp(half3 x, half3 a, half3 b);
      half4  clamp(half4 x, half4 a, half4 b);
 
      fixed  clamp(fixed x, fixed a, fixed b);
      fixed1 clamp(fixed2 x, fixed1 a, fixed1 b);
      fixed2 clamp(fixed2 x, fixed2 a, fixed2 b);
      fixed3 clamp(fixed3 x, fixed3 a, fixed3 b);
      fixed4 clamp(fixed4 x, fixed4 a, fixed4 b);

PARAMETERS
    x       Vector or scalar to clamp.

    a       Vector or scalar for bottom of clamp range.

    b       Vector or scalar for top of clamp range.

DESCRIPTION
    Returns *x* clamped to the range [*a*,*b*] as follows:

            1) Returns *a* if *x* is less than *a*; else

            2) Returns *b* if *x* is greater than *b*; else

            3) Returns *x* otherwise.

    For vectors, the returned vector contains the clamped result of each
    element of the vector *x* clamped using the respective element of
    vectors *a* and *b*.

REFERENCE IMPLEMENTATION
    clamp for float scalars could be implemented like this.

      float clamp(float x, float a, float b)
      {
        return max(a, min(b, x));
      }

PROFILE SUPPORT
    clamp is supported in all profiles except fp20.

SEE ALSO
    the max manpage, the min manpage, the saturate manpage

