unpack
Keywords: unpack, NVIDIA, NVIDIA Cg Toolkit, Cg Toolkit, Shader, Shader Programming, GPU Shader Programming, GPU Program

> ## Name

> unpack - unpacks a single values into different formatted values

> ## Synopsis

>     half2  unpack_2half(float a);
>     float2 unpack_2ushort(float a);
>     half4  unpack_4byte(float a);
>     half4  unpack_4ubyte(float a);

> ## Parameters

> a
>   Value to unpack

> ## Description

> unpack_2half unpacks a 32-bit integer value into two 16-bit floating point value.

> unpack_2ushort unpacks two 16-bit unsigned integer values from a and scales the results into individual floating point values between 0.0 and 1.0.

> unpack_4byte unpacks four 8-bit integers from a and scales the results into individual 16- bit floating point values between -(128/127) and +(127/127).

> unpack_4ubyte unpacks the four 8-bit integers in a and scales the results into individual 16- bit floating point values between 0.0 and 1.0.

> ## Reference Implementation

> unpack_2half could be implemented this way:

>     half2  unpack_2half
>     {
>       result.x = (a >> 0) & 0xFF;
>       result.y = (a >> 16) & 0xFF;
>       return result;
>     }

> unpack_2ushort could be implemented this way:

>     float2  unpack_2ushort
>     {
>       float 2 result;
>       result.x = ((x >> 0) & 0xFFFF) / 65535.0;
>       result.y = ((x >> 16) & 0xFFFF) / 65535.0;
>       return result;
>     }

> unpack_4byte could be implemented this way:

>     half4  unpack_4byte(float a)
>     {
>       half4 result;
>       result.x = (((a >> 0) & 0xFF) - 128) / 127.0;
>       result.y = (((a >> 8) & 0xFF) - 128) / 127.0;
>       result.z = (((a >> 16) & 0xFF) - 128) / 127.0;
>       result.w = (((a >> 24) & 0xFF) - 128) / 127.0;
>       return result;
>     }

> unpack_4ubyte could be implemented this way:

>     half4  unpack_4ubyte(float a)
>     {
>       half4 result ;
>       result.x = ((a >> 0) & 0xFF) / 255.0;
>       result.y = ((a >> 8) & 0xFF) / 255.0;
>       result.z = ((a >> 16) & 0xFF) / 255.0;
>       result.w = ((a >> 24) & 0xFF) / 255.0;
>       return result;
>     }

> ## Profile Support

> unpack is supported in fp30, fp40, gp4, gp5

> ## See Also

> pack