[Mesa-dev] [PATCH 3/7 v2] mesa: Shrink the size of the enum string lookup struct.

Kenneth Graunke kenneth at whitecape.org
Sun Sep 22 21:24:32 PDT 2013


On 09/22/2013 12:56 PM, Eric Anholt wrote:
> 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.
> ---
>  src/mapi/glapi/gen/gl_enums.py | 6 ++++--
>  src/mesa/main/compiler.h       | 9 +++++++++
>  2 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/src/mapi/glapi/gen/gl_enums.py b/src/mapi/glapi/gen/gl_enums.py
> index e1ab600..a0c47f4 100644
> --- a/src/mapi/glapi/gen/gl_enums.py
> +++ b/src/mapi/glapi/gen/gl_enums.py
> @@ -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]),
> diff --git a/src/mesa/main/compiler.h b/src/mesa/main/compiler.h
> index fb7baf8..0f27d5a 100644
> --- a/src/mesa/main/compiler.h
> +++ b/src/mesa/main/compiler.h
> @@ -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
> 

Looks good to me!

Patches 1, 3v2, 4v2, 5, 6 are:

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

Patch 2 looks good as well, but I haven't looked closely enough, so for
now it just gets a:

Acked-by: Kenneth Graunke <kenneth at whitecape.org>

I don't know enough about patch 7 to respond.


More information about the mesa-dev mailing list