gl_marshal.py: move the unmarshal table into a separately generated file
authorMarek Olšák <marek.olsak@amd.com>
Thu, 11 Aug 2022 12:43:54 +0000 (08:43 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 19 Oct 2022 04:23:05 +0000 (04:23 +0000)
It's unrelated to the rest of the script and it's in the way of bigger
changes.

Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18199>

src/mapi/glapi/gen/gl_marshal.py
src/mapi/glapi/gen/gl_unmarshal_table.py [new file with mode: 0644]
src/mapi/glapi/gen/meson.build
src/mesa/meson.build

index 0e7eb73..ebaec99 100644 (file)
@@ -366,18 +366,6 @@ class PrintCode(gl_XML.gl_print_base):
         out('')
         out('')
 
-    def print_unmarshal_dispatch_cmd(self, api):
-        out('const _mesa_unmarshal_func _mesa_unmarshal_dispatch[NUM_DISPATCH_CMD] = {')
-        with indent():
-            for func in api.functionIterateAll():
-                flavor = func.marshal_flavor()
-                if flavor in ('skip', 'sync'):
-                    continue
-                out('[DISPATCH_CMD_{0}] = (_mesa_unmarshal_func)_mesa_unmarshal_{0},'.format(func.name))
-        out('};')
-        out('')
-        out('')
-
     def print_create_marshal_table(self, api):
         out('/* _mesa_create_marshal_table takes a long time to compile with -O2 */')
         out('#if defined(__GNUC__) && !defined(__clang__)')
@@ -429,7 +417,6 @@ class PrintCode(gl_XML.gl_print_base):
     def printBody(self, api):
         # The first file only contains the dispatch tables
         if file_index == 0:
-            self.print_unmarshal_dispatch_cmd(api)
             self.print_create_marshal_table(api)
             return
 
diff --git a/src/mapi/glapi/gen/gl_unmarshal_table.py b/src/mapi/glapi/gen/gl_unmarshal_table.py
new file mode 100644 (file)
index 0000000..06003a9
--- /dev/null
@@ -0,0 +1,89 @@
+# Copyright (C) 2012 Intel Corporation
+# Copyright (C) 2022 Advanced Micro Devices, Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import contextlib
+import gl_XML
+import license
+import marshal_XML
+import sys
+
+header = """#include "glthread_marshal.h"
+"""
+
+current_indent = 0
+
+
+def out(str):
+    if str:
+        print(' '*current_indent + str)
+    else:
+        print('')
+
+
+@contextlib.contextmanager
+def indent(delta=3):
+    global current_indent
+    current_indent += delta
+    yield
+    current_indent -= delta
+
+
+class PrintCode(gl_XML.gl_print_base):
+    def __init__(self):
+        super(PrintCode, self).__init__()
+
+        self.name = 'gl_marshal.py'
+        self.license = license.bsd_license_template % (
+            'Copyright (C) 2012 Intel Corporation', 'INTEL CORPORATION')
+
+    def printRealHeader(self):
+        print(header)
+
+    def printRealFooter(self):
+        pass
+
+    def printBody(self, api):
+        out('const _mesa_unmarshal_func _mesa_unmarshal_dispatch[NUM_DISPATCH_CMD] = {')
+        with indent():
+            for func in api.functionIterateAll():
+                flavor = func.marshal_flavor()
+                if flavor in ('skip', 'sync'):
+                    continue
+                out('[DISPATCH_CMD_{0}] = (_mesa_unmarshal_func)_mesa_unmarshal_{0},'.format(func.name))
+        out('};')
+
+
+def show_usage():
+    print('Usage: %s [file_name]' % sys.argv[0])
+    sys.exit(1)
+
+
+if __name__ == '__main__':
+    try:
+        file_name = sys.argv[1]
+    except Exception:
+        show_usage()
+
+    printer = PrintCode()
+
+    api = gl_XML.parse_GL_API(file_name, marshal_XML.marshal_item_factory())
+    printer.Print(api)
index e5ecd43..8866701 100644 (file)
@@ -271,6 +271,15 @@ main_api_hw_select_init_h = custom_target(
   capture : true,
 )
 
+main_unmarshal_table_c = custom_target(
+  'unmarshal_table.c',
+  input : ['gl_unmarshal_table.py', 'gl_and_es_API.xml'],
+  output : 'unmarshal_table.c',
+  command : [prog_python, '@INPUT0@', '@INPUT1@'],
+  depend_files : files('marshal_XML.py') + glapi_gen_depends,
+  capture : true,
+)
+
 main_marshal_generated_c = []
 foreach x : ['0', '1', '2', '3', '4', '5', '6', '7']
   main_marshal_generated_c += custom_target(
index 6dc5844..be5f691 100644 (file)
@@ -457,6 +457,7 @@ files_libmesa += [
   ir_expression_operation_h,
   main_remap_helper_h,
   sha1_h,
+  main_unmarshal_table_c,
 ] + main_marshal_generated_c
 
 if with_sse41