Merge remote-tracking branch 'mesa-public/master' into vulkan
[mesa.git] / src / mapi / glapi / gen / gl_enums.py
index e1ab6009136452101781d40e29f78f98093bab80..041c2f8ddb8ef4649c9d1e41e610a48c11bfa570 100644 (file)
@@ -1,8 +1,8 @@
 #!/usr/bin/python2
 # -*- Mode: Python; py-indent-offset: 8 -*-
 
-# (C) Copyright Zack Rusin 2005
-# All Rights Reserved.
+# (C) Copyright Zack Rusin 2005. All Rights Reserved.
+# Copyright (C) 2015 Intel Corporation
 # 
 # Permission is hereby granted, free of charge, to any person obtaining a
 # copy of this software and associated documentation files (the "Software"),
@@ -26,6 +26,8 @@
 # Authors:
 #    Zack Rusin <zack@kde.org>
 
+import argparse
+
 import license
 import gl_XML
 import sys, getopt
@@ -47,8 +49,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 ''
@@ -76,12 +78,16 @@ static int compar_nr( const int *a, enum_elt *b )
 
 static char token_tmp[20];
 
-const char *_mesa_lookup_enum_by_nr( int nr )
+const char *_mesa_enum_to_string( int nr )
 {
-   enum_elt *elt = _mesa_bsearch(& nr, enum_string_table_offsets,
-                                 Elements(enum_string_table_offsets),
-                                 sizeof(enum_string_table_offsets[0]),
-                                 (cfunc) compar_nr);
+   enum_elt *elt;
+
+   STATIC_ASSERT(sizeof(enum_string_table) < (1 << 16));
+
+   elt = bsearch(& nr, enum_string_table_offsets,
+                 ARRAY_SIZE(enum_string_table_offsets),
+                 sizeof(enum_string_table_offsets[0]),
+                 (cfunc) compar_nr);
 
    if (elt != NULL) {
       return &enum_string_table[elt->offset];
@@ -112,6 +118,7 @@ static const char *prim_names[PRIM_MAX+3] = {
    "GL_LINE_STRIP_ADJACENCY",
    "GL_TRIANGLES_ADJACENCY",
    "GL_TRIANGLE_STRIP_ADJACENCY",
+   "GL_PATCHES",
    "outside begin/end",
    "unknown state"
 };
@@ -123,7 +130,7 @@ static const char *prim_names[PRIM_MAX+3] = {
 const char *
 _mesa_lookup_prim_by_nr(GLuint nr)
 {
-   if (nr < Elements(prim_names))
+   if (nr < ARRAY_SIZE(prim_names))
       return prim_names[nr];
    else
       return "invalid mode";
@@ -153,6 +160,12 @@ _mesa_lookup_prim_by_nr(GLuint nr)
 
         string_offsets = {}
         i = 0;
+        print '#if defined(__GNUC__)'
+        print '# define LONGSTRING __extension__'
+        print '#else'
+        print '# define LONGSTRING'
+        print '#endif'
+        print ''
         print 'LONGSTRING static const char enum_string_table[] = '
         for enum, name in enum_table:
             print '   "%s\\0"' % (name)
@@ -191,21 +204,21 @@ _mesa_lookup_prim_by_nr(GLuint nr)
                 enum.append( [name, priority] )
 
 
-def show_usage():
-    print "Usage: %s [-f input_file_name]" % sys.argv[0]
-    sys.exit(1)
+def _parser():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-f', '--input_file',
+                        required=True,
+                        help="Choose an xml file to parse.")
+    return parser.parse_args()
 
-if __name__ == '__main__':
-    try:
-        (args, trail) = getopt.getopt(sys.argv[1:], "f:")
-    except Exception,e:
-        show_usage()
 
-    api_list = []
-    for (arg,val) in args:
-        if arg == "-f":
-            api = gl_XML.parse_GL_API( val )
-            api_list.append(api);
+def main():
+    args = _parser()
+    api_list = [gl_XML.parse_GL_API(args.input_file)]
 
     printer = PrintGlEnums()
-    printer.Print( api_list )
+    printer.Print(api_list)
+
+
+if __name__ == '__main__':
+    main()