summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/glamo/glamo_context.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2010-01-27 00:56:18 +0100
committerMartin Jansa <Martin.Jansa@gmail.com>2010-02-18 15:39:27 +0100
commitfe7bf228fbb80bd0df0634f702b228a6be6a05ee (patch)
tree76f5433022f2cb1e3d8654dadaf07dbef2febf47 /src/mesa/drivers/dri/glamo/glamo_context.c
parentff382db49061697cc978ad8549cf78c310d88ff6 (diff)
Upload matrix state
Diffstat (limited to 'src/mesa/drivers/dri/glamo/glamo_context.c')
-rw-r--r--src/mesa/drivers/dri/glamo/glamo_context.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/glamo/glamo_context.c b/src/mesa/drivers/dri/glamo/glamo_context.c
index 5f435028b7..47241ae9b8 100644
--- a/src/mesa/drivers/dri/glamo/glamo_context.c
+++ b/src/mesa/drivers/dri/glamo/glamo_context.c
@@ -326,3 +326,35 @@ GLboolean glamoUnbindContext(__DRIcontext *driContextPriv)
{
return GL_TRUE;
}
+
+
+/* Convert IEEE754 32-bit float to Glamo's signed 24-bit float */
+uint32_t float7s16(GLfloat in)
+{
+ uint32_t a, b;
+ uint32_t sign, expo, mant; /* Sign, exponent, significand */
+
+ a = *(uint32_t *)&in;
+
+ /* This is bad */
+ if ( a & 0x40000000 ) {
+ printf(stderr, "Warning: Exponent won't fit into 7 bits\n");
+ }
+
+ /* This hopefully isn't a big problem */
+ if ( a & 0x0000007f ) {
+ printf(stderr, "Warning: Precision lost in FP conversion\n");
+ }
+
+ /* Separate out the right bits */
+ mant = a & 0x007fff80; /* Bits 7-22 (bits 0-6 are lost) */
+ expo = a & 0x3f800000; /* Bits 23-29 (bit 30 is lost) */
+ sign = a & 0x80000000; /* Bit 31 */
+
+ /* Shift and recombine */
+ b = sign >> 8; /* Fills bit 23 */
+ b |= expo >> 7; /* Fills bits 16-22 */
+ b |= mant >> 7; /* Fills bits 0-15 */
+
+ return b;
+}