glthread: inline SET_func and add -O1 to build _mesa_create_marshal_table faster
authorMarek Olšák <marek.olsak@amd.com>
Mon, 23 Mar 2020 01:56:20 +0000 (21:56 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 24 Mar 2020 20:28:30 +0000 (16:28 -0400)
The compile time of marshal_generated.c improved from 30.1s to 12.4s.

Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4270>

src/mapi/glapi/gen/gl_marshal.py

index bfa3f5bc34bf9158f3f6676a1875d7895b9dd3b1..9f19c914300103cc6d349d6f95550d42948fe0e4 100644 (file)
@@ -294,6 +294,10 @@ class PrintCode(gl_XML.gl_print_base):
         out('')
 
     def print_create_marshal_table(self, api):
+        out('/* _mesa_create_marshal_table takes a long time to compile with -O2 */')
+        out('#ifdef __GNUC__')
+        out('__attribute__((optimize("O1")))')
+        out('#endif')
         out('struct _glapi_table *')
         out('_mesa_create_marshal_table(const struct gl_context *ctx)')
         out('{')
@@ -308,7 +312,11 @@ class PrintCode(gl_XML.gl_print_base):
             for func in api.functionIterateAll():
                 if func.marshal_flavor() == 'skip':
                     continue
-                out('SET_{0}(table, _mesa_marshal_{0});'.format(func.name))
+                # Don't use the SET_* functions, because they increase compile time
+                # by 20 seconds (on Ryzen 1700X).
+                out('if (_gloffset_{0} >= 0)'.format(func.name))
+                out('   ((_glapi_proc *)(table))[_gloffset_{0}] = (_glapi_proc)_mesa_marshal_{0};'
+                    .format(func.name))
             out('')
             out('return table;')
         out('}')