Module: Mesa
Branch: main
Commit: 5e66e269981202120c104a1cd33c3532ab9fa0e8
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5e66e269981202120c104a1cd33c3532ab9fa0e8

Author: Marek Olšák <[email protected]>
Date:   Thu Aug 11 08:43:54 2022 -0400

gl_marshal.py: move the unmarshal table into a separately generated file

It's unrelated to the rest of the script and it's in the way of bigger
changes.

Acked-By: Mike Blumenkrantz <[email protected]>
Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18199>

---

 src/mapi/glapi/gen/gl_marshal.py         | 13 -----
 src/mapi/glapi/gen/gl_unmarshal_table.py | 89 ++++++++++++++++++++++++++++++++
 src/mapi/glapi/gen/meson.build           |  9 ++++
 src/mesa/meson.build                     |  1 +
 4 files changed, 99 insertions(+), 13 deletions(-)

diff --git a/src/mapi/glapi/gen/gl_marshal.py b/src/mapi/glapi/gen/gl_marshal.py
index 0e7eb73f857..ebaec993c82 100644
--- a/src/mapi/glapi/gen/gl_marshal.py
+++ b/src/mapi/glapi/gen/gl_marshal.py
@@ -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
index 00000000000..06003a9bf6b
--- /dev/null
+++ b/src/mapi/glapi/gen/gl_unmarshal_table.py
@@ -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('')
+
+
[email protected]
+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)
diff --git a/src/mapi/glapi/gen/meson.build b/src/mapi/glapi/gen/meson.build
index e5ecd438ad8..8866701e46b 100644
--- a/src/mapi/glapi/gen/meson.build
+++ b/src/mapi/glapi/gen/meson.build
@@ -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(
diff --git a/src/mesa/meson.build b/src/mesa/meson.build
index 6dc5844d1fa..be5f691deb9 100644
--- a/src/mesa/meson.build
+++ b/src/mesa/meson.build
@@ -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

Reply via email to