mesa: Shrink the size of the enum string lookup struct.
authorEric Anholt <eric@anholt.net>
Thu, 19 Sep 2013 21:54:13 +0000 (14:54 -0700)
committerEric Anholt <eric@anholt.net>
Mon, 23 Sep 2013 19:45:22 +0000 (12:45 -0700)
Since it's only used for debug information, we can misalign the struct and
save the disk space.  Another 19k on a 64-bit build.

v2: Make a compiler.h macro to only use the attribute if we know we can.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@.intel.com>
src/mapi/glapi/gen/gl_enums.py
src/mesa/main/compiler.h

index e1ab6009136452101781d40e29f78f98093bab80..a0c47f41f2076db3851e6be2b5a31866b59c6c70 100644 (file)
@@ -47,8 +47,8 @@ class PrintGlEnums(gl_XML.gl_print_base):
         print '#include "main/imports.h"'
         print '#include "main/mtypes.h"'
         print ''
-        print 'typedef struct {'
-        print '   size_t offset;'
+        print 'typedef struct PACKED {'
+        print '   uint16_t offset;'
         print '   int n;'
         print '} enum_elt;'
         print ''
@@ -78,6 +78,8 @@ static char token_tmp[20];
 
 const char *_mesa_lookup_enum_by_nr( int nr )
 {
+   STATIC_ASSERT(sizeof(enum_string_table) < (1 << 16));
+
    enum_elt *elt = _mesa_bsearch(& nr, enum_string_table_offsets,
                                  Elements(enum_string_table_offsets),
                                  sizeof(enum_string_table_offsets[0]),
index fb7baf84ea44b497481085e35f400e64c0013db9..0f27d5a66438ef683cf8c5b8db022914f991478b 100644 (file)
@@ -270,6 +270,15 @@ static INLINE GLuint CPU_TO_LE32(GLuint x)
 #define NULL 0
 #endif
 
+/* Used to optionally mark structures with misaligned elements or size as
+ * packed, to trade off performance for space.
+ */
+#if (__GNUC__ >= 3)
+#define PACKED __attribute__((__packed__))
+#else
+#define PACKED
+#endif
+
 
 /**
  * LONGSTRING macro