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
|