From fe7bf228fbb80bd0df0634f702b228a6be6a05ee Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 27 Jan 2010 00:56:18 +0100 Subject: Upload matrix state --- src/mesa/drivers/dri/glamo/glamo_context.c | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/mesa/drivers/dri/glamo/glamo_context.c') 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 *)∈ + + /* 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; +} -- cgit v1.2.3