> # NAME

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

> # SYNOPSIS

>       float  clamp( float  x, float  a, float  b );
>       float1 clamp( float1 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( half1 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( fixed1 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

> max, min, saturate