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
