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